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

转载请注明作者和出处:http://blog.csdn.net/c406495762/article/details/60137956

一、为何要设置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

  • 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
  • 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
  • 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

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

3.Google Chrome

  • Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
  • 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

  • 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
  • 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()

从上图可以看出,在创建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 requestif __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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

运行结果如下:

方法二:

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

# -*- coding: UTF-8 -*-
from urllib import requestif __name__ == "__main__":#以CSDN为例,CSDN不更改User Agent是无法访问的url = 'http://www.csdn.net/'#创建Request对象req = request.Request(url)#传入headersreq.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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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

四、IP代理的使用

1.为何使用IP代理

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

2.一般步骤说明

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

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

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

(3)安装Opener

使用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)

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

4.代码实例

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

# -*- coding: UTF-8 -*-
from urllib import requestif __name__ == "__main__":#访问网址url = 'http://www.whatismyip.com.tw/'#这是代理IPproxy = {'http':'106.46.136.112:808'}#创建ProxyHandlerproxy_support = request.ProxyHandler(proxy)#创建Openeropener = request.build_opener(proxy_support)#添加User Angentopener.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')]#安装OPenerrequest.install_opener(opener)#使用自己安装好的Openerresponse = request.urlopen(url)#读取相应信息并解码html = response.read().decode("utf-8")#打印信息print(html)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

运行结果如下:

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

爬虫ua设置及ip代理相关推荐

  1. Python爬虫:运用多线程、IP代理模块爬取百度图片上小姐姐的图片

    Python爬虫:运用多线程.IP代理模块爬取百度图片上小姐姐的图片 1.爬取输入类型的图片数量(用于给用户提示) 使用过百度图片的读者会发现,在搜索栏上输入关键词之后,会显示出搜索的结果,小编想大多 ...

  2. python爬虫ip代理_python爬虫批量抓取ip代理的方法(代码)

    本篇文章给大家带来的内容是关于python爬虫批量抓取ip代理的方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 使用爬虫抓取数据时,经常要用到多个ip代理,防止单个ip访 ...

  3. Python3网络爬虫开发实战,IP代理池的维护

    我们在上一节了解了代理的设置方法,利用代理我们可以解决目标网站封 IP 的问题,而在网上又有大量公开的免费代理,其中有一部分可以拿来使用,或者我们也可以购买付费的代理 IP,价格也不贵.但是不论是免费 ...

  4. 爬虫基础篇之IP代理池

    代理池介绍 由众多ip组成提供多个稳定可用代理IP的ip池. 当我们做爬虫时,最常见的反爬手段就是IP反爬,当同一个IP访问网站超出频控限制,将会被限制访问,那么代理IP池应运而生.资金充足的情况下个 ...

  5. 爬虫-Scrapy (十) 搭建ip代理池

    每一个爬虫程序员都应该有一个ip池,就像每个战士都应该有一把风剑. 一.找到一个ip代理提供商 提供ip代理的服务商很多,基本都会先提供些不稳定的免费ip,然后引导你消费,我们本次的目标就是把免费的i ...

  6. python代理ip多进程_静听网+python爬虫+多线程+多进程+构建IP代理池

    目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但 ...

  7. 静听网+python爬虫+多线程+多进程+构建IP代理池

    目标网站:静听网 网站url:http://www.audio699.com/ 目标文件:所有在线听的音频文件 附:我有个喜好就是晚上睡觉听有声书,然而很多软件都是付费才能听,免费在线网站虽然能听,但 ...

  8. 设置Web浏览器的HTTP或HTTPS代理(设置网页IP代理)

    [1]设置Web浏览器的HTTP或HTTPS代理: 原理:非常简单,修改注册表中的两个键值,然后调用InternetSetOption函数更新即可. 步骤: 1.打开注册表:HKEY_CURRENT_ ...

  9. 【python爬虫】 爬取ip代理池

    """ 目标:python 爬取ip代理池 所需模块:request bs4 模块安装: bs4: pip install bs4 开发环境:Pycharm python ...

最新文章

  1. Sprint 站立会议(个人)
  2. php单文件短链接,php实现的短网址算法分享
  3. CAM350 10.7 中文界面
  4. 【POJ - 3020】Antenna Placement (匈牙利算法,二分图最小边覆盖)
  5. 基于Hadoop的产品大数据分布式存储优化
  6. Android程序捕获未处理异常,处理与第三方方法冲突时的异常传递
  7. 【Python】AxisError: axis 0 is out of bounds for array of dimension 0
  8. Kafka 面试题(2022)
  9. 电脑自带蓝牙与HC-06蓝牙模块使用串口助手通信
  10. react 实战案例(webpack构建)
  11. php中关于js保存文件至本地的问题
  12. html 页面换皮肤,HTML中如何实现更换网页皮肤
  13. A simple test
  14. java计算工作日_java计算工作时间除去节假日以及双休日
  15. 【电脑技巧】win10怎么查看电池的损耗情况
  16. 关于Qt高分屏缩放几个知识点
  17. MVC框架的学习总结
  18. C++11 find和find_if的用法
  19. 数据结构——KMP(串)
  20. 计算机缺失esul.dll,【小白必看】关于缺失Vulkan无法打开RPSC3等问题的方案

热门文章

  1. CISC(复杂指令集)与RISC(精简指令集)的区别
  2. 计算机二级关于ppt的题目,全国计算机二级题库Ppt题目考点.doc
  3. YOLO算法创新改进系列项目汇总(入门级教程指南)
  4. 计算机调剂时科目不一样,考研调剂专业课必须一样吗
  5. swiper轮播图切换指示点改变背景颜色
  6. 天下文章一大抄,前人的成果不要跑
  7. 如何解决GitHub仓库README文件插入图片无法显示的问题
  8. 测试工程师mysql数据库基础操作之DQL 数据查询篇
  9. 剑三重置版找不到服务器,重制版客户端安装常见问题
  10. oracle主键必须加分区字段,oracle分区表和主键关系