Python3网络爬虫之使用User Agent和代理IP隐藏身份


Posted in Python onNovember 23, 2017

本文介绍了Python3网络爬虫之使用User Agent和代理IP隐藏身份,分享给大家,具体如下:

  1. 运行平台:Windows
  2. Python版本:Python3.x
  3. IDE:Sublime text3

一、为何要设置User Agent

有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份。此时,我们就可以通过设置User Agent的来达到隐藏身份的目的,User Agent的中文名为用户代理,简称UA。

User Agent存放于Headers中,服务器就是通过查看Headers中的User Agent来判断是谁在访问。在Python中,如果不设置User Agent,程序将使用默认的参数,那么这个User Agent就会有Python的字样,如果服务器检查User Agent,那么没有设置User Agent的Python程序将无法正常访问网站。

Python允许我们修改这个User Agent来模拟浏览器访问,它的强大毋庸置疑。

二、常见的User Agent

1.Android

  1. Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19
  2. Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
  3. Mozilla/5.0 (Linux; U; Android 2.2; en-gb; GT-P1000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

2.Firefox

  1. Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
  2. Mozilla/5.0 (Android; Mobile; rv:14.0) Gecko/14.0 Firefox/14.0

3.Google Chrome

  1. Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
  2. Mozilla/5.0 (Linux; Android 4.0.4; Galaxy Nexus Build/IMM76B) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19

4.iOS

  1. Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3
  2. Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3

上面列举了Andriod、Firefox、Google Chrome、iOS的一些User Agent,直接copy就能用。

三、设置User Agent的方法

先看下urllib.request.Request()

Python3网络爬虫之使用User Agent和代理IP隐藏身份

从上图可以看出,在创建Request对象的时候,可以传入headers参数。 

因此,想要设置User Agent,有两种方法:

1.在创建Request对象的时候,填入headers参数(包含User Agent信息),这个Headers参数要求为字典;

2.在创建Request对象的时候不添加headers参数,在创建完成之后,使用add_header()的方法,添加headers。

方法一:

创建文件urllib_test09.py,使用上面提到的Android的第一个User Agent,在创建Request对象的时候传入headers参数,编写代码如下:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
  #以CSDN为例,CSDN不更改User Agent是无法访问的
  url = 'http://www.csdn.net/'
  head = {}
  #写入User Agent信息
  head['User-Agent'] = 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19'
 #创建Request对象
  req = request.Request(url, headers=head)
  #传入创建好的Request对象
  response = request.urlopen(req)
  #读取响应信息并解码
  html = response.read().decode('utf-8')
  #打印信息
  print(html)

运行结果如下:

Python3网络爬虫之使用User Agent和代理IP隐藏身份

方法二:

创建文件urllib_test10.py,使用上面提到的Android的第一个User Agent,在创建Request对象时不传入headers参数,创建之后使用add_header()方法,添加headers,编写代码如下:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
  #以CSDN为例,CSDN不更改User Agent是无法访问的
  url = 'http://www.csdn.net/'
  #创建Request对象
  req = request.Request(url)
  #传入headers
  req.add_header('User-Agent', 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19')
  #传入创建好的Request对象
  response = request.urlopen(req)
  #读取响应信息并解码
  html = response.read().decode('utf-8')
  #打印信息
  print(html)

运行结果和上一个方法是一样的。

四、IP代理的使用

1.为何使用IP代理

User Agent已经设置好了,但是还应该考虑一个问题,程序的运行速度是很快的,如果我们利用一个爬虫程序在网站爬取东西,一个固定IP的访问频率就会很高,这不符合人为操作的标准,因为人操作不可能在几ms内,进行如此频繁的访问。所以一些网站会设置一个IP访问频率的阈值,如果一个IP访问频率超过这个阈值,说明这个不是人在访问,而是一个爬虫程序。

2.一般步骤说明

一个很简单的解决办法就是设置延时,但是这显然不符合爬虫快速爬取信息的目的,所以另一种更好的方法就是使用IP代理。使用代理的步骤:

 (1)调用urlib.request.ProxyHandler(),proxies参数为一个字典。

Python3网络爬虫之使用User Agent和代理IP隐藏身份

(2)创建Opener(类似于urlopen,这个代开方式是我们自己定制的)

Python3网络爬虫之使用User Agent和代理IP隐藏身份

(3)安装Opener

 Python3网络爬虫之使用User Agent和代理IP隐藏身份

使用install_opener方法之后,会将程序默认的urlopen方法替换掉。也就是说,如果使用install_opener之后,在该文件中,再次调用urlopen会使用自己创建好的opener。如果不想替换掉,只是想临时使用一下,可以使用opener.open(url),这样就不会对程序默认的urlopen有影响。

3.代理IP选取

在写代码之前,先在代理IP网站选好一个IP地址,推荐西刺代理IP。

URL:http://www.xicidaili.com/

注意:当然也可以写个正则表达式从网站直接爬取IP,但是要记住不要太频繁爬取,加个延时什么的,太频繁给服务器带来压力了,服务器会直接把你block,不让你访问的,我就被封了两天。

从西刺网站选出信号好的IP,我的选择如下:(106.46.136.112:808)

Python3网络爬虫之使用User Agent和代理IP隐藏身份

编写代码访问http://www.whatismyip.com.tw/,该网站是测试自己IP为多少的网址,服务器会返回访问者的IP。

4.代码实例

创建文件urllib_test11.py,编写代码如下:

# -*- coding: UTF-8 -*-
from urllib import request

if __name__ == "__main__":
  #访问网址
  url = 'http://www.whatismyip.com.tw/'
  #这是代理IP
  proxy = {'http':'106.46.136.112:808'}
  #创建ProxyHandler
  proxy_support = request.ProxyHandler(proxy)
  #创建Opener
  opener = request.build_opener(proxy_support)
  #添加User Angent
  opener.addheaders = [('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36')]
  #安装OPener
  request.install_opener(opener)
  #使用自己安装好的Opener
  response = request.urlopen(url)
  #读取相应信息并解码
  html = response.read().decode("utf-8")
  #打印信息
  print(html)

运行结果如下:

Python3网络爬虫之使用User Agent和代理IP隐藏身份

从上图可以看出,访问的IP已经伪装成了106.46.136.112。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中datetime常用时间处理方法
Jun 15 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
利用Python如何生成hash值示例详解
Dec 20 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
Python Request爬取seo.chinaz.com百度权重网站的查询结果过程解析
Aug 13 Python
python nmap实现端口扫描器教程
May 28 Python
Python数据分析pandas模块用法实例详解
Nov 20 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
利用Python实现某OA系统的自动定位功能
May 27 Python
基于Python的身份证验证识别和数据处理详解
Nov 14 Python
python3+PyQt5+Qt Designer实现界面可视化
Jun 10 Python
python网络爬虫之如何伪装逃过反爬虫程序的方法
Nov 23 #Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 #Python
Scrapy抓取京东商品、豆瓣电影及代码分享
Nov 23 #Python
python简单图片操作:打开\显示\保存图像方法介绍
Nov 23 #Python
python分析作业提交情况
Nov 22 #Python
Python分析学校四六级过关情况
Nov 22 #Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 #Python
You might like
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
2011/12/20 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
Python 循环终止语句的三种方法小结
2019/06/24 Python
利用python开发app实战的方法
2019/07/09 Python
python opencv图片编码为h264文件的实例
2019/12/12 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
暑期研修感言
2014/02/17 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
公安派出所所长四风问题个人对照检查材料
2014/10/04 职场文书
会计电算化实训报告
2014/11/04 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
婚礼答谢词
2015/01/04 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
统计员岗位职责范本
2015/04/14 职场文书
学术研讨会主持词
2015/07/04 职场文书
2015年校本培训工作总结
2015/07/24 职场文书
初中体育教学随笔
2015/08/15 职场文书
HTML中的表格元素介绍
2022/02/28 HTML / CSS