我正試圖建立一個簡單的網路搜刮器來捕捉不同的方言。代碼如下
from bs4 import BeautifulSoup, element
import pandas as pd
import requests
capture = requests.get('http://wiwords.com/dictionary/').text
#print(capture)。
結果 = []
soup = BeautifulSoup(capture, 'lxml')
for words in soup.find('div', class_= 'panel-body') 。
extracted = element.find('h4') # 導致錯誤的行if extracted not in results:
結果.append(extracted.text)
然而,當我運行它時,我得到一個錯誤,如 " AttributeError: module 'bs4.element' has no attribute 'find'." 。我看到一個類似的問題,在另一個論壇上搜索解決方案,沒有任何有效的答案。有什么想法,我可能做錯了什么?
uj5u.com熱心網友回復:
- 不要從庫中匯入元素,這是一個模塊,不是一個HTML標簽元素。
- 你可以使用find_all()函式來查找所有元素。 匹配給定條件的PageElement。
- 你可以通過用
words變數替換element來糾正你的代碼。 將extracted = element.find('h4')替換為extracted = words.find('h4')。
- 另外,當你使用你的標準找到元素時,那么該函式回傳一個包含導航欄和搜索元素的HTML標簽。
<div class="panel-body"> /span>
<form class="navbar-form navbar-left"/span> onsubmit="return false; " role="search">
<div class="form-group"/span>>
< select class="form-control" id="browse-country"> >。
<option value="NONE"/span>> 所有國家</option>
<option value="anguilla"/span>> Anguilla</option>。 <option value="antigua-baruda" > 安提瓜&巴布達< /option>< option value="aruba">Aruba< /option>< option value="bahamas">Bahamas< /option>< option value="barbados">Barbados<。 /option>< option value="belize">Belize< /option>< option value="bermuda">Bermuda< /option><option value="british-vi">/span>英屬維京群島。 </option><option value="cayman"/span>> 開曼群島</option>< option value="cuba"/span>> 古巴</option>< option value="dominica"/span>> 多米尼克</option>< option value="dominican-republic">多米尼加</option> <option value="grenada"> 格林納達< /option><option value="guadeloupe"/span>> 瓜德羅普</option>< option value="guyana"/span>> Guyana</option>< option value="haiti"> Haiti</option>< option value="jamaica"/span>> 牙買加</option>< option value="martinique"/span>> Martinique</option>< option value="montserrat"> Montserrat</option> <option value="netherland-antilles"> Netherland Antilles< /option>< option value="puerto-rico"> Puerto Rico< /option><option value="st-lucia"/span>>St. Lucia</option>< option value="kitts-nevis"> St. Kitts & Nevis</option>< option value="st-vincent"> St. Vincent</option>< option value="st-Martin">/span>St. Martin/Maarten</option>< option value="suriname"/span>> Suriname</option>< option value="trinidad-tobago">Trinidad & Tobago<。 /option><option value="turks-caicos" > 土耳其&凱科斯</option>< option value="us-vi">美屬維爾京群島< /option><option value="venezuela"/span>> 委內瑞拉</option> </select>
</div>/span>
<div class="form-group">
< select class="form-control" id="browse-category"> >。
<option value="NONE"/span>> 所有類別</選項>
<option value="large-up"/span>> 加大</option>< option value="shout-out">Shout< /option><option value="anatomy"> Anatomy</option>< option value="animal"> Animal< /option><option value="bingy"/span>> Bingy</option>。 <option value="bird"> Bird</option>< option value=" clothes">Clothes< /option><option value="dance"/span>> Dance</option>< option value="derogatory"> Derogatory< /option><option value="family"/span>> Family</option>< option value="folklore"> 民俗</option>< option value="food"> Food< /option><option value="fruit"/span>> 水果</option>< option value="game"> Game< /option><option value="insect"/span>> 昆蟲</option>< option value="money"> Money< /option><option value="music"/span>> Music</option>< option value="mythology"/span>> 神話</option>< option value="national-symbol">國家符號< /option><option value="people"/span>> People</option>< option value="person"> Person< /option><option value="pg"/span>> Pg</option>< option value="place"> Place< /option><option value="Plant"> Plant</option>< option value="plants"> Plants< /option><option value="pq"/span>> Pq</option>< option value=" profanity">Profanity< /option><option value="諺語"> 諺語</option>< option value="quality"/span>> 質量</option>< option value="religion"> Religion< /option><option value="river"/span>> River</option>< option value="sexual"> Sexual< /option><option value="sickness"/span>> Sickness</option>< option value="similie"> Similie< /option><option value="迷信" > 迷信</option>< option value="trinidad"/span>> 特立尼達</option>< option value="trinidadandtobago"> Trinidadandtobago< /option><option value="trinidadcreole" > Trinidadcreole</option>。 <option value="蔬菜"> 蔬菜</option>< option value=" weapon">Weapon< option> </select>
</div>/span>
< button class="btn btn-default"/span> id="browseBtn"/span>> 瀏覽</按鈕>
</form>/span>
</div>/span>
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" class="snippet-box-edit snippet-box-result" frameborder="0"></iframe>
這將出現AttributeError。你可以通過使用一個try-except塊來避免這個錯誤
soup = BeautifulSoup(capture, 'lxml'/span>)
for words in soup.find_all('div', class_= 'panel-body') 。
extracted = words.find('h4')
if extracted not in results:
try:
results.append(extracted.text)
except AttributeError:
pass。
你也可以通過使用soup.find_all('div', class_= 'panel-body')[2: ]
還有一點需要仔細檢查你的if陳述句。在你的陳述句中,你正在檢查結果串列中的一個HTML元素,而不是其文本。所以你可能最終會有重復的結果。你可以將你的 if 陳述句改寫為:
extracted = words = words.
extracted = words.find('h4').text 如果 extracted 不在結果中。 results.append(extracted)
或者使用一個集合來洗掉重復的內容
results = set(results)
uj5u.com熱心網友回復:
from bs4 import BeautifulSoup
import pandas as pd
import requests
capture = requests.get('http://wiwords.com/dictionary/').text
#print(capture)。
結果 = []
soup = BeautifulSoup(capture, 'lxml')
for words in soup.find_all('div'/span>,attrs={'class'/span>:'panel-pody'/span>})。)
extracted = words.find_all('h4') #導致錯誤的行。
if extracted not in results:
結果.append(extracted.text)
你能試著這樣運行你的代碼嗎
?轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/331290.html
標籤:
上一篇:R,XPath,textscraping:獲取一個節點內的文本,同時對其一個子節點的屬性值進行過濾。
下一篇:在網路搜刮中尋找專案
