2014-10-10 3 views
0

Вот мой код, используя find_all, но он прекрасно работает с .find():объект '' NoneType не отозваны с помощью '' find_all в BeautifulSoup

import requests 
from BeautifulSoup import BeautifulSoup 

r = requests.get(URL_DEFINED) 
print r.status_code 

soup = BeautifulSoup(r.text) 
print soup.find_all('ul') 

Это то, что я получил:

Traceback (most recent call last): 


File "scraper.py", line 19, in <module> 
    print soup.find_all('ul') 
TypeError: 'NoneType' object is not callable 
+1

Я * думаю *, что ваша проблема заключается в том, что 'find_all' существует только в BS4 (где он стандартизован, именовав больше рекомендаций PEP8), похоже, что вы используете версию 3, которая имела соглашение об именах' .findAll' ... Обратите внимание, что использование 'soup ('ul')' является эквивалентом * find all * в обеих версиях –

+0

Я новичок в python, как я могу установить bs4 из BeautifulSoup –

+0

Я сделал это ответом - может быть, полезно для других в будущем. Я вижу, что вы знакомы с пипсом (с вашего предыдущего вопроса), так что должно иметь смысл для вас :) –

ответ

6

Похоже, вы используете BeautifulSoup версии 3, которая использовала несколько иной конвенции именования, например: .findAll, в то время как Стандартное обозначение BeautifulSoup 4 должно быть больше PEP8, например: .find_all (но сохраняет старшее имя для обратной совместимости). Обратите внимание, что soup('ul') является эквивалентом найти все на обоих.

Чтобы скачать и установить, используйте pip install beautifulsoup4.

Затем измените ваш импорт быть:

from bs4 import BeautifulSoup 

Тогда вы хорошо идти.

1

Загрузить BS4 отсюда. http://www.crummy.com/software/BeautifulSoup/#Download

Установите его и импортировать его в начале вашего кода:

import requests 
from bs4 import BeautifulSoup 

r = requests.get(URL_DEFINED) 
print r.status_code 

soup = BeautifulSoup(r.text) 
print soup.find_all('ul') 
Смежные вопросы