我重新检查了我的代码,并查看了打开 URL 将 Web 数据传递到 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 响应,该响应由变量 content 捕获,它可以读取响应的状态,但在将其传递到 Beautiful Soup 后,Web 数据没有得到转换进入 Beautiful Soup 对象(变量 soup)。你可以看到我尝试读取一些标签和文本, get_text() 返回一个空列表,这很奇怪。
奇怪的是,当我通过 content.data 访问网络数据时,数据会显示出来,但它没有用,因为我无法使用 Beautiful Soup 来解析它。我的问题是什么?谢谢。
如果你只是想抓取页面,requests
将获得您需要的内容:
from bs4 import BeautifulSoup
import requests
r = requests.get('http://www.crummy.com/software/BeautifulSoup/')
soup = BeautifulSoup(r.content)
In [59]: soup.title
Out[59]: <title>Beautiful Soup: We called him Tortoise because he taught us.</title>
In [60]: soup.title.name
Out[60]: 'title'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)