学习的课本为《python网络数据采集》,大部分代码来此此书。

  网络爬虫爬取数据首先就是要有爬取的权限,没有爬取的权限再好的代码也不能运行。所以首先要伪装自己的爬虫,让爬虫不像爬虫而是像人一样访问网页。废话不多说开始伪装。

  1.修改请求头

  这里要用到python的requests的模块,首相介绍一下http请求头,它就是你每次在访问网页时,向服务器传输的一组属性和配置信息。下面有七个字段被大多数浏览器用来初始化网络请求。

属性

内容

Host

https://www.google.com/

Connection

keep-alive

Accept

text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

User-Agent

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like

Gecko) Chrome/39.0.2171.95 Safari/537.36

Referrer

https://www.google.com/

Accept-Encoding

gzip,deflate,sdch

Accept-Language

en-US,en;q=0.8

这是用户在访问网页时所发出的host请求(图为书中作者的请求,打开F12可查看自己的host请求)。一下为不加请求头时python爬虫发出的请求。

Accept-Encoding

identity

User-Agent

Python- urllib/3.4

用requests模块可以对请求头自定义。我们用下面的程序来采集这个网站的信息,验证我们浏览器的cookie 设置:  

1 import requests
 2 from bs4 import BeautifulSoup
 3 session = requests.Session()  # 创建一个session对象
 4 headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5)
 5       AppleWebKit 537.36 (KHTML, like Gecko) Chrome",
 6       "Accept":"text/html,application/xhtml+xml,application/xml;
 7       q=0.9,image/webp,*/*;q=0.8"}

 8 url = "https://www.whatismybrowser.com/developers/what-http-headers-is-my-browser-sending"  #这个网站可以把请求头显示在页面上方便我们验证
10 req = session.get(url, headers=headers)  #发起get请求
11 bsObj = BeautifulSoup(req.text)
12 print(bsObj.find("table",{"class":"table-striped"}).get_text)

输出结果中的请求头应该和程序中设置的headers 是一样的。这样就完成了模拟用户访问的第一步模拟请求头。