上一篇文章中,我们通过调用urllib下的request模块写了一个简单的爬虫,用来获取百度首页的信息。实际上,一般的服务都会有反爬虫机制,如:判断用户是否是浏览器访问;判断请求来源的地址等。那么我们就可以通过伪装成浏览器或者使用代理IP来进行访问。
我们先来看一下如何伪装成浏览器。服务器一般通过User-Agent来识别客户使用的操作系统及版本、CPU类型、浏览器及版本、浏览器语言、浏览器插件等。我们可以通过传入不同的User-Agent来模拟不同的浏览器。查看本地浏览器的User-Agent的方法如下:
1.打开浏览器,通过F12打开开发者工具,切换到Network页面
2.任意请求一个网址,在Request Headers中就可以看到当前浏览器的User-Agent
上一篇中,我们编写的代码如下:
from urllib import request
url = r"http://www.baidu.com/"
# 发送请求,获取响应信息
response = request.urlopen(url).read().decode() # 解码
print(response)
现在,我们来添加一些内容,使其能够伪装成浏览器去访问网址:
from urllib import request
url = r"http://www.baidu.com/"
# 定义User-Agent
agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36"
# 定义header
header = {
"User-Agent": agent
}
# 自定义请求,request模块中提供了Request方法用来自定义请求
req = request.Request(url, headers=headers)
# 发送请求,获取响应信息
response = request.urlopen(req).read().decode() # 解码
print(response)