requests
模块和urllib
模块的请求有什么区别?
出于测试目的,我将 GET 请求发送至
https://www.securityweek.com/
仅包含用户代理标头。
urllib
获得正确的页面作为响应,而 requests
获得“启用 JavaScript 和 cookies 以继续”的响应
以下是示例:
使用请求:
import requests
url = 'https://www.securityweek.com/'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
with open('test1.html', 'w', encoding='utf-8') as f:
f.write(response.text)
使用urllib:
from urllib.request import Request, urlopen
url = 'https://www.securityweek.com/'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36'
}
response = urlopen(Request(url, headers=headers))
with open('test2.html', 'w', encoding='utf-8') as f:
f.write(response.read().decode('utf-8'))
我尝试过使用 httpbin 等工具进行检查,但据我所知它们应该是相同的。
requests
通常在底层使用 urllib
,但在向端点发送请求时,它往往会提供更易于使用的 API。
关于你的问题,
requests
和urllib
都不会执行Javascript(可以选择Selenium,因为它使用文字网络驱动程序),但这两个实际上如何绕过各个网站中的机器人检测系统可能有所不同。
requests
自动发送一组默认标头,包括 User-Agent
、Accept-Encoding
和 Detection
,这可能会触发这些机器人系统并阻止与 Web 服务器的进一步交互。
两者之间更具体的区别可以在网站上的这个主题上找到。