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

python爬虫之伪装浏览器的相关文章

零基础自学用Python 3开发网络爬虫(三): 伪装浏览器君

原文出处: Jecvay Notes (@Jecvay) 上一次我自学爬虫的时候, 写了一个简陋的勉强能运行的爬虫alpha. alpha版有很多问题. 比如一个网站上不了, 爬虫却一直在等待连接返回response, 不知道超时跳过; 或者有的网站专门拦截爬虫程序, 我们的爬虫也不会伪装自己成为浏览器正规部队; 并且抓取的内容没有保存到本地, 没有什么作用. 这次我们一个个解决这些小问题. 此外, 在我写这系列文章的第二篇的时候, 我还是一个对http的get和post以及response这些

Python爬虫:常用浏览器的useragent

1,为什么需要修改UserAgent在写python网络爬虫程序的时候,经常需要修改UserAgent,有很多原因,罗列几个如下: 不同Agent下看到的内容不一样,比如,京东网站上的手机版网页和pc版网页上的商品优惠不一样 为避免被屏蔽,爬取不同的网站经常要定义和修改useragent值. ...... 修改agent值这个操作本身比较简单,UserAgent值是一串字符串,替换上即可,主要是用对UserAgent值.下面列出常用浏览器的useragent: 2,PC端的UserAgentsa

Python伪装浏览器请求爬虫豆瓣小组

Python爬虫,下载豆瓣小组图片 # -*- coding: utf-8 -*- # ----------------------------------------------- # 程序:豆瓣小组图片爬虫 # 版本:1.0 # 语言:Python 3.4 # 作者:gdp12315 # 操作:输入豆瓣小组讨论版块地址.起始页面.终止页面 # 功能:下载小组帖子里发布的图片 # 注意:下载的保存地址为作者本机地址 读者根据自身情况更改 # --------------------------

转载:用python爬虫抓站的一些技巧总结

原文链接:http://www.pythonclub.org/python-network-application/observer-spider 原文的名称虽然用了<用python爬虫抓站的一些技巧总结>但是,这些技巧不仅仅只有使用python的开发可以借鉴,我看到这篇文章的时候也在回忆自己做爬虫的过程中也用了这些方法,只是当时没有系统的总结而已,谨以此文为鉴,为以前的爬虫程序做一个总结. 转载原文如下: 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,

Python 爬虫批量下载美剧 from 人人影视 HR-HDTV

本人比較喜欢看美剧.尤其喜欢人人影视上HR-HDTV 的 1024 分辨率的高清双字美剧,这里写了一个脚本来批量获得指定美剧的全部 HR-HDTV 的 ed2k下载链接.并依照先后顺序写入到文本文件,供下载工具进行批量下载.比方用迅雷.先打开迅雷,然后复制全部下载链接到剪切板,迅雷会监视剪切板来新建全部任务.假设迅雷没有自己主动监视,能够自己点击新建然后粘贴链接.Python源码例如以下.用的是Python3 : # python3 实现,以下的实例 3 部美剧爬完大概要 10 s import

Python爬虫基础知识入门一

一.什么是爬虫,爬虫能做什么 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.比如它在抓取一个网页,在这个网中他发现了一条道路,其实就是指向网页的超链接,那么它就可以爬到另一张网上来获取数据. 爬虫可以抓取的某个网站或者某个应用的内容,提取有用的价值.也可以模拟用户在浏览器或者App应用上的操作,实现自动化的程序.以下行为都可以用爬虫实现: 咨询报告(咨询服务行业) 抢票神器 投票神器 预测(

【Python爬虫学习笔记(1)】urllib2库相关知识点总结

1. urllib2的opener和handler概念 1.1 Openers: 当你获取一个URL你使用一个opener(一个urllib2.OpenerDirector的实例).正常情况下,我们使用默认opener:通过urlopen.但你能够创建个性的openers.可以用build_opener来创建opener对象.一般可用于需要处理cookie或者不想进行redirection的应用场景(You will want to create openers if you want to f

Python爬虫实战(2):爬取京东商品列表

1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反,JavaScript实现的动态网页内容,无法从html源代码抓取需要的内容,必须先执行JavaScript. 我们在<Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容>一文已经成功检验了动态网页内容的抓取方法,本文将实验程序进行改写,使用开源Python爬虫

python 爬虫抓取心得

quanwei9958 转自 python 爬虫抓取心得分享 urllib.quote('要编码的字符串') 如果你要在url请求里面放入中文,对相应的中文进行编码的话,可以用: urllib.quote('要编码的字符串') query = urllib.quote(singername) url = 'http://music.baidu.com/search?key='+query response = urllib.urlopen(url) text = response.read()