|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
21 爬虫的浏览器伪装技术实战
一、浏览器伪装技术原理
我们在爬取某些网站时,由于对方服务器会对爬虫进行屏蔽,出现403(禁止访问)的错误或者其他问题。而我们用浏览器进行访问,则可以正常访问。这是因为,如果不对爬虫进行伪装一下,对方会很容易的判断己方为爬虫。正常情况下,大多数网站是不欢迎爬虫的光临的,因为会对服务器造成很大的开销。
而由于特殊情况,我们又不得不爬取这类网站。于是,我们可以利用爬虫的浏览器伪装技来实现。浏览器伪装一般通过报头(headers)进行。
在搜狗浏览器(其他也行)打开百度首页(https://www.baidu.com/),按“F12”,将上方的标签切换到“Network”(图中红色椭圆处)。再按“F5”刷新网页。
然后在出现的连接中任意点击一个,切换到“Headers”。然后点开“Request Headers”选项,可以找到“User-Agent:”(用户代理)这一项,这就是浏览器的标识。换句话说,如果你是用浏览器访问的这个网站,那么这个标识符将会是对应浏览器的。如果你用的是爬虫访问这个网站,它将会是爬虫的标识。而我们的爬虫要进行伪装,就是把这个User-Agent字段改成正规的标识(如浏览器的)。
二、浏览器伪装技术的实现
由于urlopen()对于一些HTTP的高级功能不支持,所以,如果我们要修改报头,则可以使用urllib.request.build_opener()方法。当然,也可以使用urllib.request.Request()实现浏览器的模拟。重点在前者,后者在后面的学习中才会用到。
(1)
头文件格式:headers = ("User-Agent",具体用户代理值)
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
import urllib.request
url = "http://blog.csdn.net/"
#构造头,就是User-Agent的内容
headers = ("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0")
#利用
opener = urllib.request.build_opener()
opener.addheaders = [headers]
#将opener安装为全局,让urlopen()访问时也添加对应报头
urllib.request.install_opener(opener)
data1 = opener.open(url).read()
data2 = urllib.request.urlopen("http://blog.csdn.net/").read()
print(len(data1))
print(len(data2))
其中,将opener安装为全局,让urlopen()访问时也添加对应报头,这对于以后的稍微复杂的爬虫是十分方便的。
(2)使用Request(),但是其headers必须是字典类型。import urllib.request
url = "http://blog.csdn.net/"
#构造头,就是User-Agent的内容(使用Request()的headers必须是字典类型
headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.221 Safari/537.36 SE 2.X MetaSr 1.0"}
req = urllib.request.Request(url,headers=headers)
data=urllib.request.urlopen(req).read()
print(len(data))
总结一下,为了实现爬虫的“合法化”,我们需要对爬虫进行伪装(很多时候是必须的)。可以使用urllib.request.build_opener()方法。当然,也可以使用urllib.request.Request()或者其他的方法。
|
评分
-
查看全部评分
|