2016-10-09 4 views
1

Я работаю над скребковым проекта и веб-я следующий пункт, который я планирую веб переделку:Красивый вопрос Суп с 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' 

Я знаю, что там должно быть чтобы я мог просматривать каждый из этих тд, чтобы вытащить значение страны. (Я могу получить страну, используя 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

Я обновил свой ответ, он должен исправить вашу проблему. В следующий раз попробуйте google «beautifulsoup get image alt», и вы найдете ответ. –

+1

Получил, что, похоже, сработало! Спасибо! –

Смежные вопросы