Ошибка объекта 'NoneType' не имеет атрибута 'find', который иногда вызывает - PullRequest
0 голосов
/ 13 сентября 2018

Я учусь изучать веб-страницы с помощью Python (3.7) и BS4, извлекая данные из веб-сайта результатов скачек. Веб-сайт http://racing.hkjc.com/racing/Info/Meeting/Results/English/Local/20080412/ST/5

Вот часть моего кода. Основная цель - получить данные из таблицы> tbody> tr> td. Класс стола {'class': 'tableBorder trBgBlue tdAlignC number12 draggable'}

import urllib.request
from bs4 import BeautifulSoup

theURL = "http://racing.hkjc.com/racing/Info/Meeting/Results/English/Local/20080412/ST/5"
thePage = urllib.request.urlopen(theURL)
soup = BeautifulSoup(thePage, "html.parser")
table = soup.find('table', {'class': 'tableBorder trBgBlue tdAlignC number12 draggable'})
tBody = table.find('tbody')
for tRows in tBody.find_all('tr'):
   # Get the td.text

Иногда я могу получить все данные внутри таблицы и записать в CSV-файл. Но иногда будет вызвана следующая ошибка.

Traceback (most recent call last):
  File "K:/fyp/raceRecord.py", line 32, in <module>
    tBody = table.find('tbody')
AttributeError: 'NoneType' object has no attribute 'find'

Я понимаю, что эта ошибка будет вызвана тем, что table.find('tbody') возвращает None. Однако я не знаю, почему иногда код работает, а иногда нет. Это потому, что страница все еще загружается table.find('tbody') = None? Благодарю.

Ответы [ 2 ]

0 голосов
/ 13 июля 2019

У меня тоже была такая же проблема, затем я включил сон на 3 секунды над строкой кода, где он возвращал объект NoneType после этого он работает изящно

со времени импорта сна

сон (3) # везде, где необходимо

0 голосов
/ 13 сентября 2018

Я думаю, что это решит проблему.Страница не загружается должным образом, когда "urllib.request.urlopen" выполняется.Код проверяет, есть ли таблица.Пожалуйста, проверьте и дайте мне знать.Спасибо.

import urllib.request
from bs4 import BeautifulSoup

theURL = "http://racing.hkjc.com/racing/Info/Meeting/Results/English/Local/20080412/ST/5"
while (True):
    thePage = urllib.request.urlopen(theURL)
    soup = BeautifulSoup(thePage, "html.parser")
    table = soup.find('table', {'class': 'tableBorder trBgBlue tdAlignC number12 draggable'})
    if (table != None):
        tBody = table.find('tbody')
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...