2016-10-09 86 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

明白了,这似乎已经奏效!谢谢! –