Я перепроверил свой код и рассмотрел сопоставимые операции по открытию URL-адреса для передачи веб-данных в Beautiful Soup, по какой-то причине мой код просто ничего не возвращает, хотя он в правильной форме:
>>> from bs4 import BeautifulSoup
>>> from urllib3 import poolmanager
>>> connectBuilder = poolmanager.PoolManager()
>>> content = connectBuilder.urlopen('GET', 'http://www.crummy.com/software/BeautifulSoup/')
>>> content
<urllib3.response.HTTPResponse object at 0x00000000032EC390>
>>> soup = BeautifulSoup(content)
>>> soup.title
>>> soup.title.name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'name'
>>> soup.p
>>> soup.get_text()
''
>>> content.data
a stream of data follows...
Как показано, ясно, что urlopen() возвращает HTTP-ответ, который захвачен переменным содержимым, имеет смысл, что он может прочитать статус ответа, но после того, как он будет передан в Beautiful Soup, веб-данные не будут преобразованы в объект Beautiful Soup (переменный суп). Вы можете видеть, что я пытался прочитать несколько тегов и текста, но get_text() возвращает пустой список, это странно.
Как ни странно, когда я получаю доступ к веб-данным через content.data, данные отображаются, но это бесполезно, так как я не могу использовать Beautiful Soup для их анализа. В чем моя проблема? Спасибо.
BeautifulSoup
, иначеsoup.title
вызвал бы исключение, а не дал бы вамNone
. Лучший способ узнать это — распечататьtype(soup)
. - person abarnert   schedule 31.07.2014urlopen
— самый низкий уровень. Если у вас нет веской причины, вы не хотите использовать самый низкий уровень. Особенно, если вы только учитесь. Вот почему в той же документации как минимум дважды рекомендуется использовать один из удобных методов. Хотя вы могли бы изучить все мельчайшие детали того, какurllib3
работает под прикрытием, не лучше ли сначала научиться использовать его простым способом и написать некоторый рабочий код, с которым можно поиграться, чтобы учиться дальше? - person abarnert   schedule 01.08.2014