Python BS4 не находит Div - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь очистить https://www.edsurge.com/product-reviews/curriculum-products/math

Когда я делаю это:

site = 'https://www.edsurge.com/product-reviews/curriculum-products/math'
soup = bs.BeautifulSoup(urlopen(site),"html5lib")
print soup

Я могу найти div, который ищу <div class="browse-main p1">

Однако, когда я пытаюсь найти его, используя:

for div in soup.findall('div',class_='browse-main p1'):
        print div

Я получаю эту ошибку (возможно, это означает, что он не может найти div).

for div in soup.findall('div',class_='browse-main p1'):
TypeError: 'NoneType' object is not callable

Я также пытался использовать soup.findall('div'), и он не может найти ни одного. Я знаю, что мог бы использовать селен, но если бы в этом не было необходимости, я бы предпочел этого не делать. Что я нахожу странным, так это то, что div присутствует, когда я печатаю суп.

Кто-нибудь знает, что происходит? Спасибо

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Как упомянуто @ bruno в комментарии :

soup реализует хук __getattr__ (для разрешения динамических атрибутов), но не правильноподнять AttributeError для неизвестных методов - вместо этого возвращается None.Так как метод имеет имя findAll (не findall), soup.findall фактически превращается в None, который (конечно) не вызывается, поэтому появляется сообщение об ошибке.

Также обратите внимание, что findAll() - синтаксис bs3.Синтаксис для bs4: find_all().

Итак, вы должны использовать

soup.find_all('div',class_='browse-main p1')

, а не

soup.findall('div',class_='browse-main p1')
0 голосов
/ 11 мая 2018

findall - Нет, поэтому его нельзя вызвать.

Попробуйте:

for div in soup.findAll('div',class_='browse-main p1'):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...