如何将使用 Beautiful Soup 4 的 python urllib2 应用程序(一个网络抓取工具)移植为使用请求包

how to port python urllib2 app (a web scraper) that uses Beautiful Soup 4 to use requests package instead

我正在尝试更新在 Anaconda 中使用 Beautiful Soup 4 in Python 3 的网络抓取应用程序,以使用请求包而不是 urllib、urllib2 和 urllib3。

Anaconda 频道中不存在 urllib 和 urllib2,根据我的阅读,请求包已使 urllib 和 urllib2 过时。我对网络抓取的 Python 编程还很陌生,还没有完全理解这 4 个包的所有概念和内部微妙之处。

当我用 "requests.get()" 替换 "urllib2.urlopen()" 时,出现以下错误:

导入请求 从 bs4 导入 BeautifulSoup

'''replace the following line with "page =  Request.get(url)" '''
#   page = urllib2.urlopen(url)
page = requests.get(url)
soup_page = BeautifulSoup(page,"lxml")

我在 bs4 模块中收到以下没有解释的错误消息: 文件 "C:\ProgramData\Anaconda3\lib\site-packages\bs4__init__.py",第 246 行,在 init 中 elif len(标记) <= 256 和 (

TypeError: 'Response' 类型的对象没有 len()

这个错误信息让我深入到 bs4 中的 init.py 的内部。

我找不到关于如何将 urllib 或 urllib2 代码移植到 Beautiful Soup 4 请求的解释。

任何人都可以提供有关如何移植 urllib / urllib2 应用程序以在 Python 3 中使用带有漂亮汤的请求的明确指南吗?

Anaconda / conda 不会将 urllib 或 urllib2 导入 Python 3 环境。

谢谢。

富有

错误发生是因为您试图以错误的方式将响应的 html 代码传递给 Beautifulsoup。传递response.text,而不是响应对象:

# page = urllib2.urlopen(url)

page = requests.get(url)

soup_page = BeautifulSoup(page.text, "lxml")

您可能需要阅读 requests documentation