【发布时间】:2014-07-31 19:40:38
【问题描述】:
我重新检查了我的代码,并查看了打开 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() 返回了一个由变量 content 捕获的 HTTP 响应,它可以读取响应的状态是有道理的,但是在它被传递到 Beautiful Soup 之后,网络数据却没有' t 被转换为 Beautiful Soup 对象(变量汤)。你可以看到我已经尝试读取一些标签和文本,get_text() 返回一个空列表,这很奇怪。
奇怪的是,当我通过 content.data 访问网络数据时,数据会显示出来,但它没有用,因为我不能使用 Beautiful Soup 来解析它。我的问题是什么?谢谢。
【问题讨论】:
-
它显然被转换为
BeautifulSoup对象——否则,soup.title会引发异常而不是给你None。更好的判断方法是打印出type(soup)。 -
你的代码什么也没有,尝试打印 content.read()
-
您手动构建池然后调用"the lowest level call for making a request" 是否有原因?
-
@abarnert 我明白了,谢谢。
-
@PadraicCunningham content.read() 给出 b''
标签: python web-scraping beautifulsoup urllib3 web-content