2016-10-09 116 views
1

我上的Web刮項目工作,我有計劃的網絡刮以下項目:美麗的湯的問題與webscraping

<td class="country"> 
    <div> 
    <img alt="Niger" height="27" src="http://assets.rio2016.nbcolympics.com/country-flags/52x35/NIG.png" width="40"/> 
    Niger           
    </div> 

在這種情況下,我試圖讓該國尼日爾出來的列表。我有一張桌子,我試圖把所有的國家拉出來。我現在的代碼如下所示:

response = requests.get('http://www.nbcolympics.com/medals') 
soup = BeautifulSoup(response.content, 'lxml') 
for td in soup.findAll("td",{"class": "country"}): 
    print(td) 

這會給我提供很多信息。我只想專注於表格中的國家價值。 (此表有誰在奧運會比賽的所有國家。)如果我嘗試做這樣的事情:

for td in soup.findAll("td",{"class": "country"}).children: 

我收到以下錯誤信息:

Traceback (most recent call last): 
File "idea.py", line 15, in <module> 
    for row in soup.find_all('tr').children: 
AttributeError: 'ResultSet' object has no attribute 'children' 

我知道,必須有一個我可以通過這些td來查看每個國家的價值。 (我可以使用get_text()得到國家,但是有更多的信息與它一起出現。)另外,如果div值有一個類,那麼我認爲這樣做也相當容易。感謝您的任何幫助。

我也曾嘗試:

for td in soup.findAll("img", {"width": "40"}) 
     print(td) 

幾乎讓我我想要的。它會打印以下內容:

<img alt="Togo" height="27" src="http://assets.rio2016.nbcolympics.com/country-flags/52x35/TOG.png" width="40"/> 

但是,我沒有得到它的國家!但我只是在那裏!

回答

1

findAll返回找到的元素的一個ResultSet,這是可迭代的。你需要循環在找到的元素和訪問.text

for element in soup.findAll("img", {"class": "country"}): 
    print(element.get('alt', '')) 

我已經取代了"td",{"class": "country"}選擇,因爲你與類country尋找一個圖像。

+0

是的,我更新了以顯示當您使用img標籤時會發生什麼 - 它幾乎讓我得到我想要的,但在國家之前停止。所以,它只是讓我得到我想要的,但不完全!感謝您的幫助! –

+0

我已經更新了我的答案,它應該解決您的問題。下次嘗試谷歌「美麗的圖像替代」,你會找到你的答案。 –

+1

明白了,這似乎已經奏效!謝謝! –