首页 > 技术文章 > 爬虫笔记(二)——浏览器的模拟(Headers属性)

longwhite 2018-07-15 21:04 原文

        有的时候,我们无法爬取一些网页,会出现403错误,因为这些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置。那么如果我们向爬取这些网页的信息,应该怎么办呢? 可以设置一些Headers信息,模拟成浏览器去访问这些网站,此时,就能够解决这个问题了。接下来我们来找找自己浏览器的Headers属性。

        1.首先打开任意网页,按下F12,并选择网络(network)

        2.任意点击网页连接,使其发生动作。点击其中一个动作,User-Agent字样的一串信息。

此时我们就得到了该信息

User-Agent:Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.

接下来我们讲如何让爬虫模拟成浏览器访问页面的设置方法,有以下两种方式。

方法一:使用build_opener()修改报头

import urllib.request

url = "https://mp.csdn.net/postedit/81051697"
headers = ("User-Agent","Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45")
opener = urllib.request.build_opener()
opener.addheaders = [headers]
data = opener.open(url).read()

上述代码中利用urllib.request.build_opener()创建一个对象并赋给opener,接下来设置opener的addheaders,即设置对应的头信息,设置格式为:”对象名.addheaders = [头信息] ",设置好后就可以利用opener对象的open方法打开对应的链接,此时是具有头信息的打开操作行为,即会模仿浏览器取打开,格式为:”对象名.open(url地址)“。

方法二:使用add_header()添加报头

import urllib.request

url = "https://mp.csdn.net/postedit/81051697"
req = urllib.request.Request (url)
req.add_header('User-Agent','Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45')
data = urllib.request.urlopen(req).read()

首先使用urllib.request.Request(url)创建一个Request对象并赋予req,格式为:”urllib.request.Request(url地址)“,再利用add_header()函数给对象添加报头,格式为:”对象名.add_header('字段名','字段值')。

推荐阅读