@dasha1996

При парсинге таблицы выдает ошибку 'NoneType' object has no attribute 'find'. Как решить?

Необходимо спарсить значения определенных ячеек в одной из таблиц, размещенных на сайте. В коде конкретно указываю, к какой таблице нужен доступ, но все время выдает ошибку. Как бы не пытался изменить код, все равно ошибка
AttributeError: 'NoneType' object has no attribute 'find_all'

Вот мой код. Ошибка в строке 'rows'.

from bs4 import BeautifulSoup
from lxml import html
import csv

headers = {'Accept': 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
           'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36 Edg/104.0.1293.63'}
url = 'https://old.baltbet.ru/BetInfoSE.aspx?id=688709154'

response = requests.get(url, headers=headers)

file = open('data.csv','w')
writer = csv.writer(file)

soup = BeautifulSoup(response.text, 'html.parser')


rows = soup.find('table',class_ ='betinfo2').find('tbody').find_all('tr')
for row in rows:
    columns = row.find_all('td')
    data_list = [columns[0].text]

writer.writerow(data_list)
file.close()
  • Вопрос задан
  • 1170 просмотров
Решения вопроса 1
@PavelMos
rows = soup.find('table',class_ ='betinfo2').find('tbody').find_all('tr')

В питоне всё - объекты, и результаты функций возвращают объекты, к которым, как тут, последовательно применяются другие функции (в данном случае это встроенные функции объекта BS).
find_all применяется к тому, что было получено в find('tbody'), примененному к soup.find и тд. Но из-за того ,что на предыдущем шаге ничего не нашлось, функция вернула NoneType. К которому нельзя применять find_all, рассчитанный на работу с объектом BS.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы