#python #python-3.x #beautifulsoup
#python #python-3.x #beautifulsoup
Вопрос:
Я пытаюсь создать веб-скребок (код ниже), но я всегда получаю эту ошибку:
Traceback (most recent call last):
File "wikipedia.py", line 11, in <module>
for table in match.find_all('table'):
File "/Users/claycrosby/opt/anaconda3/lib/python3.8/site-packages/bs4/element.py", line 2160, in __getattr__
raise AttributeError(
AttributeError: ResultSet object has no attribute 'find_all'. You're probably treating a list of elements like a single element. Did you call find_all() when you meant to call find()?
Я пробовал поменять find
find_all
местами в соответствии с сообщением, но это не меняет возвращаемую ошибку. Кроме того, существует несколько table
вложенных vevent summary
таблиц, которые я изначально нахожу
Я пробовал несколько итераций перехода непосредственно из сводки событий в tr и получаю ту же ошибку
import requests
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/wiki/2020–21_Top_14_season'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html, 'html.parser')
match = soup.find_all('.vevent summary')
#for table in match.find_all('table'):
for data in match.find_all('tbody'):
for row in data.find('tr'):
for cell in row.find('td'):
print (cell.text.replace('amp;nbsp;', ''))
Ответ №1:
В Beautiful Soup используйте find_all("div", {"class": "vevent"})
для поиска по имени класса. Ошибка ссылалась на match
то, что возвращает список.
Попробуйте этот код:
import requests
from bs4 import BeautifulSoup
url = 'https://en.wikipedia.org/wiki/2020–21_Top_14_season'
response = requests.get(url)
html = response.content
soup = BeautifulSoup(html, 'html.parser')
match = soup.find_all("div", {"class": "vevent"}) # returns list
print('matches',len(match))
for m in match:
for table in m.find_all('table'):
for data in table.find_all('tbody'):
for row in data.find_all('tr'):
for cell in row.find_all('td'):
print (cell.text.replace('amp;nbsp;', ''))
Комментарии:
1. Спасибо! Это было очень полезно, решило мою проблему. Спасибо, что ответили на вопрос в стиле новичка
Ответ №2:
Вы можете попробовать это:
from bs4 import BeautifulSoup
import urllib.request
import bs4 as bs
url_1 = 'https://en.wikipedia.org/wiki/2020–21_Top_14_season'
sauce_1 = urllib.request.urlopen(url_1).read()
soup_1 = bs.BeautifulSoup(sauce_1, 'lxml')
for table in soup_1.find_all('table'):
print(table.text)