【发布时间】:2016-04-29 11:24:35
【问题描述】:
我注意到有几种方法可以启动 http 连接以进行网络抓取。我不确定某些是否是更新和最新的编码方式,或者它们是否只是具有不同优点和缺点的不同模块。更具体地说,我试图了解以下两种方法之间的区别,您会推荐什么?
1) 使用 urllib3:
http = PoolManager()
r = http.urlopen('GET', url, preload_content=False)
soup = BeautifulSoup(r, "html.parser")
2) 使用请求
html = requests.get(url).content
soup = BeautifulSoup(html, "html5lib")
除了需要导入不同的模块这一简单事实之外,这两个选项的区别是什么?
【问题讨论】:
-
requests模块在底层使用(和bundles / vendorizesurllib3) - 但它提供了更高级别和更简单的 API。 -
撇开 requests 提供更高级别的 API(可能代码更少)这一事实不谈,是否存在选择其中一个更可取的情况?还是完全选择
requests通常是更好的选择? -
我的建议是始终使用
requests。它只是让 HTTP 处理起来非常愉快,如果有一些你不能用requests做的事情,你可以用普通的urllib3做,我还没有遇到过。但这只是my opinion。 -
向供应商请求一堆库(包括 urllib3、certifi 等)并为您预先配置它们。如果您需要较低级别的访问权限,或者只是想控制正在发生的事情,那么您可以直接使用 urllib3。
标签: python-3.x http beautifulsoup python-requests urllib3