这两个bs4对象之间有区别吗?
from urllib2 import urlopen, Request
from bs4 import BeautifulSoup
req1 = Request("https://stackoverflow.com/") # HTTPS
html1 = urlopen(req1).read()
req2 = Request("http://stackoverflow.com/") # HTTP
html2 = urlopen(req2).read()
bsObj1 = BeautifulSoup(html1, "html.parser")
bsObj2 = BeautifulSoup(html2, "html.parser")
您真的需要指定HTTP协议吗?
答案 0 :(得分:3)
这是我有限的理解:在这种情况下没有实际的区别。
我的理解是,大多数拥有https的网站都会将http网址重定向到https,就像这里的情况一样。站点可能同时具有http版本和https版本,在这种情况下,它们可能不会重定向。这将是不好的做法,但没有什么能阻止某人这样做。
我仍然会尽可能明确地使用https,这是最佳做法。
答案 1 :(得分:1)
通过HTTP协议进行的所有通信都使用HTTP动词GET,POST,PUT,DELETE。指定协议有两个目的:
1)它指定数据通信方案。
一般URI的格式为:
方案:[// [user [:password] @] host [:port]] [/ path] [?query] [#fragie] ,常见的方案是 http(s), ftp,mailto,文件,数据和irc 。
2)它指定方案是否支持SSL加密:
使用http方案,Send and Download
中添加的' 可确保对数据进行SSL加密。
根据https
Python docs:
强烈建议始终使用SSL证书验证。为了启用验证,您需要一组根证书。最简单,最可靠的方法是使用提供Mozilla根证书包的
urllib3
包:
certifi
PoolManager 会自动处理证书验证,如果验证失败则会引发SSLError:
pip install certifi
>>> import certifi
>>> import urllib3
>>> http = urllib3.PoolManager(
... cert_reqs='CERT_REQUIRED',
... ca_certs=certifi.where())