1. 构造合理的 HTTP 请求头
除了处理网站表单,requests 模块还是一个设置请求头的利器。HTTP 的请求头是在你每次向网络服务器发送请求时,传递的一组属性和配置信息。HTTP 定义了十几种古怪的请求头类型,不过大多数都不常用。只有下面的七个字段被大多数浏览器用来初始化所有网络请求(表中信息是我自己浏览器的数据)
请求头可以通过 requests 模块进行自定义。https://www.whatismybrowser.com/ 网站就是一个非常棒的网站,可以让服务器测试浏览器的属性。我们用下面的程序来采集这个网站的信息,验证我们浏览器的 cookie 设置:
以request包为例:
在这里可以使用user_agents.txt中的任意一个user-agent来达到模拟访问的效果,另外也可以建立一个useragent池
比如百度页面,下拉的时候通过浏览器自带的network可以看到有个useragent
通过agent池的方式的例子:
def get_agent():
#模拟header的user-agent字段,返回一个随机的user-agent字典类型的键值对
agents = ['Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0;',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv,2.0.1) Gecko/20100101 Firefox/4.0.1',
'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11',
'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)']
fakeheader = {}
fakeheader['User-agent'] = agents[random.randint(0, len(agents))]
return fakeheader
# 注意看新的请求函数:
def get_html(url):
try:
r = requests.get(url, timeout=30,headers=get_agent())
r.raise_for_status
r.encoding = r.apparent_encoding
return r.status_code
except:
return "Someting Wrong!"