1.urllib2修改header:

(1)在使用网络爬虫时,有一些站点不喜欢被程序访问(非人为访问),会检查连接者的“身份证”;默认情况下,urllib2把自己的版本号Python-urllib2/x.y作为自己的“身份证号码”来通过检查,这个身份证号码可能会让站点有点迷惑,或者干脆不工作

(2)这时可以让python程序冒充浏览器访问网站,网站是通过浏览器发送过来的User-Agent的值来确认浏览器身份的,用urllib2创建一个请求对象,并给它一个包含头数据的字典,修改User-Agent欺骗网站,一般来说,把User-Agent修改成Internet Explorer是最安全的

补充:

  User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等

  一些网站常常通过判断 UA 来给不同的操作系统、不同的浏览器发送不同的页面,因此可能造成某些页面无法在某个浏览器中正常显示,但通过伪装 UA 可以绕过检测。

  浏览器的 UA 字串

  标准格式为: 浏览器标识 (操作系统标识; 加密等级标识; 浏览器语言) 渲染引擎标识 版本信息

  

(3)将所有常见的User-Agent全部放到一个userAgents.py文件中,以字典的形式保存起来,方便以后当成模块导入使用:

#!/usr/bin/env python

#-*- coding: utf-8 -*-

pcUserAgent = {

"safari 5.1 – MAC":"User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",

"safari 5.1 – Windows":"User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50",

"IE 9.0":"User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0);",

"IE 8.0":"User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)",

"IE 7.0":"User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)",

"IE 6.0":"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",

"Firefox 4.0.1 – MAC":"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",

"Firefox 4.0.1 – Windows":"User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1",

"Opera 11.11 – MAC":"User-Agent:Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11",

"Opera 11.11 – Windows":"User-Agent:Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11",

"Chrome 17.0 – MAC":"User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",

"Maxthon":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)",

"Tencent TT":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)",

"The World 2.x":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",

"The World 3.x":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)",

"sogou 1.x":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)",

"360":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)",

"Avant":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)",

"Green Browser":"User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"

}

mobileUserAgent = {

"iOS 4.33 – iPhone":"User-Agent:Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",

"iOS 4.33 – iPod Touch":"User-Agent:Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",

"iOS 4.33 – iPad":"User-Agent:Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5",

"Android N1":"User-Agent: Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",

"Android QQ":"User-Agent: MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1",

"Android Opera ":"User-Agent: Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10",

"Android Pad Moto Xoom":"User-Agent: Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13",

"BlackBerry":"User-Agent: Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+",

"WebOS HP Touchpad":"User-Agent: Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0",

"Nokia N97":"User-Agent: Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124",

"Windows Phone Mango":"User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)",

"UC":"User-Agent: UCWEB7.0.2.37/28/999",

"UC standard":"User-Agent: NOKIA5700/ UCWEB7.0.2.37/28/999",

"UCOpenwave":"User-Agent: Openwave/ UCWEB7.0.2.37/28/999",

"UC Opera":"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999"

}

(4)编写testUrllib2ModifyHeader.py,测试urllib2修改Header:

# !/usr/bin/env python

# -*- coding:utf-8 -*-

import urllib2

import userAgents

"""userAgents是一个自定义的模块,位置处于当前目录下"""

class Urllib2ModifyHeader(object):

def __init__(self):

"""这个是PC端+IE的User-Agent"""

PIUA=userAgents.pcUserAgent.get('IE 9.0')

"""这个是移动端+UC的User-Agent"""

MUUA=userAgents.mobileUserAgent.get('UC standard')

#测试用的网站选择的是有道翻译

self.url='http://fanyi.youdao.com'

self.useUserAgent(PIUA,1)

self.useUserAgent(MUUA,2)

def useUserAgent(self,userAgent,name):

request=urllib2.Request(self.url)

request.add_header(userAgent.split(':')[0],userAgent.split(':')[1])

response=urllib2.urlopen(request)

fileName=str(name)+'.html'

with open(fileName,'a') as fp:

fp.write("%s \n\n" %userAgent)

fp.write(response.read())

if __name__ == '__main__':

umh=Urllib2ModifyHeader()

执行结果,得到1.html和2.html:

代码详解:

(1)urllib2.Request:urllib2.urlopen可以接受一个Request对象或者url,(在接受Request对象时候,并以此可以来设置一个URL的headers)

  class urllib2.Request(url[, data][, headers][, originreqhost][, unverifiable])

  Request类是一个抽象的URL请求。

  5个参数的说明如下:

II.2.1.1 :URL——是一个字符串,其中包含一个有效的URL。

II.2.1.2 :data——是一个字符串,指定额外的数据发送到服务器,如果没有data需要发送可以为“None”。目前使用data的HTTP请求是唯一的。当请求含有data参数时,HTTP的请求为POST,而不是GET。

数据应该是缓存在一个标准的application/x-www-form-urlencoded格式中。urllib.urlencode()函数用映射或2元组,返回一个这种格式的字符串。通俗的说就是如果想向一个URL发送数据(通常这些数据是代表一些CGI脚本或者其他的web应用)。

例如在网上填的form(表单)时,浏览器会POST表单的内容,这些数据需要被以标准的格式编码(encode),然后作为一个数据参数传送给Request对象。例子如下:

II.2.1.3 headers——是字典类型,头字典可以作为参数在request时直接传入,也可以把每个键和值作为参数调用add_header()方法来添加。

作为辨别浏览器身份的User-Agent header是经常被用来恶搞和伪装的,因为一些HTTP服务只允许某些请求来自常见的浏览器而不是脚本,或是针对不同的浏览器返回不同的版本。

例如,Mozilla Firefox浏览器被识别为“Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11”。默认情况下,urlib2把自己识别为Python-urllib/x.y(这里的xy是python发行版的主要或次要的版本号,如在Python 2.6中,urllib2的默认用户代理字符串是“Python-urllib/2.6。

详细学习urllib2参考博客:http://blog.csdn.net/howeblue/article/details/47426265

Python网络爬虫之urllib2修改Header相关推荐

  1. python 网络爬虫

    一.网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字. 把互联网比喻成一个蜘蛛网,那么Spider就是在网上爬来爬去的蜘蛛. 网络蜘蛛是通过网页的链接地址来寻找网页的. 从网站某一 ...

  2. Python网络爬虫(三) 爬虫进阶

    ###目录: Python网络爬虫(一)- 入门基础 Python网络爬虫(二)- urllib爬虫案例 Python网络爬虫(三)- 爬虫进阶 Python网络爬虫(四)- XPath Python ...

  3. 精通python网络爬虫-精通python网络爬虫

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 作者:韦玮 转载请注明出处 随着大数据时代的到来,人们对数据资源的需求越来越多, ...

  4. 精通python网络爬虫-精通Python网络爬虫:核心技术、框架与项目实战 PDF

    给大家带来的一篇关于Python爬虫相关的电子书资源,介绍了关于Python.Python网络爬虫.Python核心技术.Python框架.Python项目实战方面的内容,本书是由机械工业出版社出版, ...

  5. Python 网络爬虫笔记1 -- Requests库

    Python 网络爬虫笔记1 – Requests库 Python 网络爬虫系列笔记是笔者在学习嵩天老师的<Python网络爬虫与信息提取>课程及笔者实践网络爬虫的笔记. 课程链接:Pyt ...

  6. python网络爬虫资源库名_Python网络爬虫

    网友NO.524767 Python网络爬虫与信息提取(实例讲解) 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.B ...

  7. 40行代码教你利用Python网络爬虫批量抓取小视频

    1. 前言 还在为在线看小视频缓存慢发愁吗?还在为想重新回味优秀作品但找不到资源而忧虑吗?莫要慌,让python来帮你解决,40行代码教你爬遍小视频网站,先批量下载后仔细观看,岂不美哉! 2. 整理思 ...

  8. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  9. 北京理工大学·Python网络爬虫与信息提取·知识整理

    学习目标: python爬虫部分的学习 学习内容: mooc北京理工大学·Python网络爬虫与信息提取 对Scrapy内核依然一知半解,但mooc内容已经学完整理 后续将对Scrapy继续进行学习 ...

最新文章

  1. java学习笔记11--Annotation
  2. 蓝桥杯Java输入输出相关
  3. opencv 3和qt5计算机视觉应用开发_【资源分享】有哪些学习openCV的网站或书籍?...
  4. 抽象代数的抽象方法本质
  5. 易到用车提现再度被延期?!声明:因贾跃亭所欠债务导致
  6. Android odex反编译为dex
  7. FFmpeg的下载及其简单使用
  8. pdf资源有密码怎么办?
  9. 计算机图形学基础第七章ppt,第三章 计算机图形学基础ppt课件.ppt
  10. 【scratch案例教学】scratch端午节划龙舟比赛 scratch创意编程 少儿编程 边玩边学过个快乐端午节
  11. 一文看懂Web后端开发
  12. 调查问卷或量表用总分还是平均分好?
  13. 倾斜摄影测量知识基础
  14. .NET Core 如何验证信用卡卡号
  15. android studio怎么创建布局,Android Studio--活动创建简单布局
  16. SAP License:ERP系统实施价格是多少?
  17. 程序设计课程报告2018212824沈园园
  18. 小米开盘大跌超 5 % ;今日头条或联合网易做游戏;YurunHttp 3.0 发布 | 极客头条...
  19. s3 java sdk_s3javasdk文档.pdf
  20. [闻缺陷则喜]编码与实现方式

热门文章

  1. 网页版腾讯地图搜索地点定位
  2. artDialog.js的使用
  3. Python 图片白底透明化处理
  4. 立体视觉入门指南(3):相机标定之张式标定法【超详细值得收藏】
  5. Flink 获取 Kafka 中的数据,分流存储到 Redis、MySQL 中
  6. map clear java_Java Map clear()用法及代码示例
  7. 朝花夕拾 Java练习2
  8. 创建简单的银行账户类,包括开户人、账号、和存款余额3个属性,以及查询余额、存款、取款等方法。创建两个账户验证类的设计。
  9. 北京2008年奥运会奖牌设计公布
  10. Windows·查找某路径下所有的Office文件及压缩文件