python爬虫之伪装浏览器

问题描述:File "D:\python\Lib\httplib.py", line 417, in _read_status

                        raise BadStatusLine(line)

首先我们得对这两行代码并对此进行解释

user_agent=‘Mozilla/4.0(compatible;MSIE 5.5; Windows NT)‘
headers ={ ‘User-Agent‘:user_agent}

User-Agent是http协议中的一部分,属于头域的组成部分
这是一种向范文网站提供你所使用的浏览器类型,操作系统,浏览器内核等信息的标识
通过这个标识,用户所访问的网站可以显示不同的排版从而为用户提供更好的体验或者
进行信息统计

IE版本Mozilla/4.0(compatible;MSIE8.0;Windows NT 6.0)

版本号是MSIE之后的数字,比如MSIE 8.0表示ie8,而Window NT 6.1对应操作系统是window7
Windows NT 6.0 对应操作系统 windows vista  
Windows NT 5.2 对应操作系统 windows 2003   
Windows NT 5.1 对应操作系统 windows xp   
Windows NT 5.0 对应操作系统 windows 2000

UNIX/LINUX 为X11代替

Firefox版本Mozilla/5.0(Windows;U;Windows NT 5.2)Gecko/20088070208 Firefox/3.0.1
其中N:表示无安全加密 I表示弱安全加密 U:表示强安全加密,上面的u表示加密等级
Chrome版本Mozilla/5.0(Windows;U;Windows NT 5.2)AppleWebKit/525.13(KHTML,like Gecko)
其中版本号是chrome后的数字
[USER_AGENT] => Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; 360SE)

注意以上的User-Agent的作用就是伪装成浏览器修改http包中的header来实现,
此条代码的试用环境是网站反感爬虫的到访

而这条语句本身没有问题,正如用User_agent来伪装浏览器寻求访问,在将headers设置成我们伪装的地址
此时我们又需要知道urllib和urllib2模块的区别和用法

区别:1.在python中urllib和urllib2不可互相代替
2.urllib2是urllib的增强,但是urllib2有urllib没有的函数
3.urllib2可以用来设置request参数,来修改header的头,更改user agent
4.urllib支持设置编码的函数,urllib.urlencode在模拟登陆的时候,经常要编码过后才能登陆,如果不用
第三方完成模拟登陆,就需要用urllib
5.urllib2和urllib一起搭配使用.

关于urllib2的介绍
urllib2提供基础函数urlopen,通过向指定的url发出请求来获取数据,最简单的形式就是
import urllib2
response=urllib2.urlopen(‘网页‘)
html=response.read()
这个过程就是我们平时刷网页的代码形式,基于请求响应模型
response=urllib2.urlopen(‘网页‘)
这个过程实际上是有两个步骤:
我们指定一个域名并发送请求
request=urllib2.request(‘网页‘)
服务器响应客户端的请求
response=urllib.urlopen(requset)

谔谔扯远了,开头的这个问题的原因是在request请求语句中并没有将headers添加进去,无法构成有效请求,导致请求列表不存在,嗯我是这样理解的

request = urllib2.Request(url,headers=headers)这样了之后这个错误就消失了,附上图片

时间: 07-08