4.3 浏览器模拟--headers属性

‘‘‘4.3 浏览器模拟--headers属性‘‘‘‘‘‘#有的时候,我们无法爬取一些网页,会出现403错误,因为这些网页为了防止别人恶意# 采集其信息所以进行了一些反爬虫的设置。#那么,我们该如何如何爬取我们想爬的这些网页的信息呢?可以通过设置一些headers信息,模拟成浏览器去访问这些网站。此时,就能解决这个问题。‘‘‘#让爬虫模拟成浏览器访问网页的设置方法‘‘‘方法一:使用build_opener()修改报头由于urlopen()不支持一些HTTP的高级功能,所以,我们如果要修改报头,可以使用urllib2.build_opener()进行,要爬取无法爬取的网页,我们可以使用如下代码:‘‘‘import urllib2url = "http://blog.csdn.net/weiwei_pig/article/details/51178226"headers=("User-Agent","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36")opener=urllib2.build_opener()opener.addheaders=[headers]data=opener.open(url).read()‘‘‘上述代码中,首先,我们定义了一个变量url存储要爬取的网址,然后再定义一个变量headers存储对应的User-Agent信息,定义的格式为(“User-Agent”,具体信息),具体信息我们刚才已经从浏览器中获取了,该信息获取一次即可,以后在爬取其他网站的时候可以直接用,所以可以保存起来,不用每次都通过F12去找。

然后,我们需要使用urllib2.build_opener()创建自定义的opener对象并赋给变量opener,接下来,设置opener对象的addheaders,即设置对应的头信息,设置格式为:“opener对象名.addheaders=[头信息]”,设置好头信息之后,我们就可以使用opener对象的open()方法打开对应的网址了。此时,打开操作是已经具有头信息的打开操作行为,即会模仿为浏览器去打开,使用格式是“opener对象名.open(url地址)”。打开对应网址后,再使用read()方法读取对应数据,并赋给data变量。‘‘‘#此时,我们成功实现了模拟浏览器去爬取对应的网页#可以将对应的内容写入文件fhandle=open("E://3.html","wb")fhandle.write(data)fhandle.close()#若未发现报错,则爬取网页成功,同时可以看到有相关的3.html文档

‘‘‘方法2:使用add_header()添加报头‘‘‘import urllib2url ="http://blog.csdn.net/weiwei_pig/article/details/51178226"req=urllib2.Request(url)req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36")data=urllib2.urlopen(req).read()  #对应于python3的data=urlib.request.urlopen(req).read()‘‘‘首先,设置要爬取的网址,然后使用urllib2.Request(url)创建一个Request对象并赋给变量req,创建对象的格式为:urllib2.Request(url地址)。

随后,使用add_header()方法添加对应的报头信息,格式为:Request对象名.add_header(字段名,字段值)此时,已经成功设置好报头,然后我们使用urlopen()打开该Request对象即可打开对应网址,所以此时我们使用data=urllib2.urlopen(req).read()打开了对应网址并读取了网页内容,并赋给了data变量。

此时,成功模拟浏览器爬取了对应网址的信息。我们同样可以像方法1中一样将对应的信息写入文件。‘‘‘‘‘‘以上两种方法都可以实现报头的添加,我们可以发现,这两种方法都是使用设置报头中的User-Agent字段信息来将对应的访问行为模仿成浏览器访问,避免了403错误。只是添加报文的方法有所不同,值得注意的是,方法1中使用的是addheaders()方法,方法2中使用的是add_header()方法,注意末尾有无s以及有无下划线的区别。‘‘‘
时间: 2024-10-19 21:44:49

4.3 浏览器模拟--headers属性的相关文章

通过springmvc的RequestMapping的headers属性的使用

直接上图: springmvc中可以通过@RequestMapping注解折配置headers属性,也就是通过headers属性来配置请求头信息,从而通过这个属性值来映射请求,因为不同浏览器的Accept-Encoding等请求头信息可能有不同,所以利用这点我们就可以使同一个访问路径(同一个http请求,但是响应不同,即返回不同的信息).例如以上的图中分别是chrome和Edge两个浏览器,他们的请求头信息就不太一样,同样的url,返回的结果却不一样. url为:http://localhost

IE7浏览器下CSS属性选择器二三事

一.为何专门说起IE7 以前,或者说数年前,我们从事桌面端网页开发的时候,基本上都还要兼顾IE6浏览器, 即使有些特性,IE7支持,我们也会忽略之.于是,我们会不自然地把IE6和IE7浏览器归为一路货色,研究的多半是两个浏览器共性的东西,比方说haslayout之类的. 但是,最近1~2年,至少我个人所从事的桌面PC项目都不需要管IE6浏览器(0.3%)了,但是,还是要关心IE7浏览器(3%+)的.虽然,我们有丰富的处理IE6浏览器的经验,但是,当我们不要管IE6浏览器的时候,我们前端技术的选型

获取表单的初始值,模拟placeholder属性

input和textarea有一个默认属性defaultValue,即初始值. 即使在页面操作修改了input和textarea的内容,获取到的defaultValue依然是初始值.可通过该值模拟placeholder属性,而不额外添加任何属性,标签之类. js:  以input为例 jq: 完全模拟placeholder,无需添加任何额外属性和标签. textarea标签模拟过程完全一致:

基于jQuery的让非HTML5浏览器支持placeholder属性的代码(转)

效果图:http://code.google.com/p/jquery-placeholder-js/ 演示代码:http://demo.jb51.net/js/2011/jqueryplaceholder/打包下载:http://xiazai.jb51.net/201105/yuanma/jqueryplaceholder.rar 基于jQuery的让非HTML5浏览器支持placeholder属性的代码(转),布布扣,bubuko.com

让IE6/IE7/IE8浏览器支持CSS3属性

让IE6/IE7/IE8浏览器支持CSS3属性 一.下载 您可以狠狠地点击这里:ie-css3.htc,这个玩意儿是让IE浏览器支持CSS3表现的关键东东. 二.上面的是什么东西 首先说说.htc文件,.htc文件是个脚本文件,我个人以为与js文件属于同一货色,只是呢,貌似htc是Internet Explorer(IE)的私生子,只有IE才认它.htc文件可以用来描述web行为,web行为允许程序员把自定义的功能“连接”到现有的元素和控件,而不是必须让用户下载二进制文件(例如ActiveX 控

用PC浏览器模拟手机浏览器(一):无扩展版

想浏览手机版,打开对应网址却跳转到PC版?怎么办? 下面咱们来说下在只是安装了浏览器,无需其他安装操作的情况下来怎么用PC浏览器模拟手机浏览器,然后访问手机站点. 浏览器众多,IE系列的咱就不考虑了,相信你也不用他浏览手机站点,否侧太没品位了,那咱今天就说说其他的:Chrome和Safari两个浏览器,在无任何扩展的情况下怎么来模拟手机浏览器. 其实,还是如前言里说的,就是修改浏览器的User Agent,来让那些以User Agent为判断标准的站点认为你当前的浏览器为手机浏览器,从而呈现手机

为什么IE6浏览器下line-height属性不管用了

为什么IE6浏览器下line-height属性不管用了:建议:尽可能的手写代码,可以有效的提高学习效率和深度.并不是所有的情况都会导致line-height属性在IE6浏览器下失效, 而是在特定条件才会遇到.例如以下代码就是正常的: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http

js浏览器对象的属性和方法

1.window对象 /*1.计算浏览器窗口大小*/ //不算滚动条: var width = window.innerWidth; var height = window.innerHeight; document.write("浏览器窗口宽度:"+width+",浏览器窗口高度:"+height+"<br/>"); //算滚动条: var outerWidth = window.outerWidth; var outerHeigh

chrome浏览器模拟手机 地理定位

chrome浏览器模拟手机 地理定位 在pc端做touch页面调试的时候,常常会遇到需要模拟定位的情况 chrome浏览器有着强大的调试工具,尤其是新版chrome浏览器 下面我就以新版chrome浏览器为例,模拟下如何用电脑模拟手机定位 1.首先 F12 调出控制台 2. 点击这个小手机调出手机模拟器 3.选择一款手机 4.如图所示,选择emulation -- sensors  --- coordinates  需要手动填写纬度和经度 酱紫就可以模拟定位啦,是不是很简单,嘻嘻!~^_^