上一节,大概讲述了Python 爬虫的编写流程, 从这节开始主要解决如何突破在爬取的过程中限制。比如,IP、JS、验证码等。这节主要讲利用IP代理突破。

  1.关于代理

  简单的说,代理就是换个身份。网络中的身份之一就是IP。比如,我们身在墙内,想要访问google、u2b、fb等,直接访问是404,所以要换个不会被墙的IP,比如国外的IP等。这个就是简单的代理。

  在爬虫中,有些网站可能为了防止爬虫或者DDOS等,会记录每个IP的访问次数,比如,有些网站允许一个IP在1s(或者别的)只能访问10次等,那么我们就需要访问一次换一个IP(具体什么策略,自己决定)。

  那么问题来了,这些代理从哪得到?对于公司来讲,买代理IP。但是对于个人的话,可能会有浪费。那么怎么办呢?网上有很多免费的代理IP网站,但是手动更改的话,很浪费时间,并且免费的IP有很多不可用。所以,我们可以用爬虫爬那么IP。用上一节的代码,完全可以做到。这里我们用http://www.xicidaili.com/nn/1测试,声明:仅学习交流,切勿用作商业用途等

  2.获取代理IP,代码如下:

  

  1. #encoding=utf8
  2. import urllib2
  3. import BeautifulSoup
  4.  
  5. User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'
  6. header = {}
  7. header['User-Agent'] = User_Agent
  8.  
  9. url = 'http://www.xicidaili.com/nn/1'
  10. req = urllib2.Request(url,headers=header)
  11. res = urllib2.urlopen(req).read()
  12.  
  13. soup = BeautifulSoup.BeautifulSoup(res)
  14. ips = soup.findAll('tr')
  15. f = open("../src/proxy","w")
  16.  
  17. for x in range(1,len(ips)):
  18. ip = ips[x]
  19. tds = ip.findAll("td")
  20. ip_temp = tds[2].contents[0]+"\t"+tds[3].contents[0]+"\n"
  21. # print tds[2].contents[0]+"\t"+tds[3].contents[0]
  22. f.write(ip_temp)

  代码说明:

    a).这里我们使用的urllib2模块,因为,这个请求有点特殊,服务器会验证请求中的header(如有疑问,可参考http的相关资料)

    b).urllib2与urllib的区别在于,urllib2发送请求的时候可携带参数(我现在只用到这点区别)

    c).open()用于打开文件,第一个参数是文件的路径可以填绝对路径,例如E:\\proxy("\"在编程中是特殊字符,要用"\\"代表实际的"\")。也可以是相对路径,比    如"../src/proxy",就是文件相对于代码的位置。第二个参数"w",代表打开文件的权限,w代表写权限,r代表读权限。这个在很多系统中都通用。比如,linux等

    d).for循环,如果之前学过java或者其他高级语言,可能不太习惯,因为他们用的是for(;;)这样的。python中的for循环,in 表示X的取值,按顺序取到in后面的参数

 特别注意:别忘了for语句后面的冒号(":")

    c).range函数,代表生成一系列数,如果range(0,6,1),意思就是从0开始,到6结束(不包括6),每次增加1(也就是步长为1),生成一个数组,结果就是[0, 1, 2, 3, 4, 5]

    e).f.write()就是往文件里面写数据,如果打开文件的时候,没有"w"权限,则无法写入。

  页面截图:

  运行结果:

  

  3.并不是所有的代理都能用,原因有很多,可能是我们所处的网络连不到这个代理,也有可能是这个代理,连不到我们的目标网址,所以,我们要验证一下。以http://ip.chinaz.com/getip.aspx作为目标网址为例(这个是测试ip地址的网址)代码如下:

  

  1. #encoding=utf8
  2. import urllib
  3. import socket
  4. socket.setdefaulttimeout(3)
  5. f = open("../src/proxy")
  6. lines = f.readlines()
  7. proxys = []
  8. for i in range(0,len(lines)):
  9. ip = lines[i].strip("\n").split("\t")
  10. proxy_host = "http://"+ip[0]+":"+ip[1]
  11. proxy_temp = {"http":proxy_host}
  12. proxys.append(proxy_temp)
  13. url = "http://ip.chinaz.com/getip.aspx"
  14. for proxy in proxys:
  15. try:
  16. res = urllib.urlopen(url,proxies=proxy).read()
  17. print res
  18. except Exception,e:
  19. print proxy
  20. print e
  21. continue

  代码说明:

    a).ip = lines[i].strip("\n").split("\t") 这个是去掉每行末尾的换行符(也就是"\n"),然后以制表符(也就是"\t")分割字符串为字符串数组

    b).proxy_temp = {"http":proxy_host}其中http代表代理的类型,除了http之外还有https,socket等这里就以http为例

    c).urllib.urlopen(url,proxies=proxy) 其中proxies就是代理。以代理模式访问目标网址

    d).socket.setdefaulttimeout(3)设置全局超时时间为3s,也就是说,如果一个请求3s内还没有响应,就结束访问,并返回timeout(超时)

  运行结果如图:

  

  从结果看可用的并不是很多。但是也够个人用了。

  至此,IP代理的使用就结束了。

  备注:

  1.代码仅供学习交流,切勿用作商业用途

  2.代码如有问题,多多指教

  3.转载请注明出处

Python 爬虫入门(二)—— IP代理使用的更多相关文章

  1. 2.Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  2. Python爬虫入门二之爬虫基础了解

    1.什么是爬虫 爬虫,即网络爬虫,大家可以理解为在网络上爬行的一直蜘蛛,互联网就比作一张大网,而爬虫便是在这张网上爬来爬去的蜘蛛咯,如果它遇到资源,那么它就会抓取下来.想抓取什么?这个由你来控制它咯. ...

  3. 转 Python爬虫入门二之爬虫基础了解

    静觅 » Python爬虫入门二之爬虫基础了解 2.浏览网页的过程 在用户浏览网页的过程中,我们可能会看到许多好看的图片,比如 http://image.baidu.com/ ,我们会看到几张的图片以 ...

  4. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  5. python爬虫中的ip代理设置

    设置ip代理是爬虫必不可少的技巧: 查看本机ip地址:打开百度,输入“ip地址”,可以看到本机的IP地址: 本文使用的是goubanjia.com里面的免费ip: 使用时注意要注意传输协议是http还 ...

  6. Python爬虫入门(二)之Requests库

    Python爬虫入门(二)之Requests库 我是照着小白教程做的,所以该篇是更小白教程hhhhhhhh 一.Requests库的简介 Requests 唯一的一个非转基因的 Python HTTP ...

  7. Python爬虫入门之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  8. Python爬虫入门四之Urllib库的高级用法

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...

  9. 反爬虫之搭建IP代理池

    反爬虫之搭建IP代理池 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部.可惜加了header请求头,加了cookie 还是被限制爬取了.这时就得祭出IP代理池!!! 下面就是requ ...

  10. python爬虫入门02:教你通过 Fiddler 进行手机抓包

    哟~哟~哟~ hi起来 everybody 今天要说说怎么在我们的手机抓包 通过 python爬虫入门01:教你在Chrome浏览器轻松抓包 我们知道了 HTTP 的请求方式 以及在 Chrome 中 ...

随机推荐

  1. vue项目部署流程

    用vue-cli搭建的做法1.npm run build2.把dist里的文件打包上传至服务器 例 /data/www/,我一般把index.html放在static里所以我的文件路径为:/data/ ...

  2. gulp-babel 阻止了js文件编译的进程?

    现象 :   编译打包的js没有输出到目标文件夹里,只是单单的生成了一个目标目录,目录里没有文件 解决方法:gulp-babel ^8.0.0 使用了 ^7.0.1的 依赖插件.统一gulp-babe ...

  3. centos7安装oracle的一些问题

    在配置监听的时候尝试了很多次都是不能创建,最后将 /data/oracle/product/11.2.0/db_1/network/admin目录下的listener.ora和tnsname.ora两 ...

  4. do...while和while...do的两种场景比较

    场景:脚本每5分钟执行一次,从数据库中每次查询1000数据进行处理,直到处理结束.两种用while和do...while两种方式实现的伪代码如下: 1. while...do $count = mys ...

  5. 单片机FLASH与RAM、ROM的关系

    片机FLASH主要用作程序存贮器,就是替代以前的ROM,最大的有有点是降低了芯片的成本并且可以做到电擦写,目前市场上单片机的FALSH寿命相差比较大,擦写次数从1000~10万的都有,但存储时间可以保 ...

  6. 用css 实现凹陷的线条

    box-shadow: 0 1px 0 rgba(255,255,255,0.2) inset,0 -1px 0 rgba(0,0,0,.2) inset; 因为颜色为透明颜色,所以颜色是什么样的,不 ...

  7. JDK和CGLIB动态代理原理

    1.JDK动态代理利用拦截器(拦截器必须实现InvocationHanlder)加上反射机制生成一个实现代理接口的匿名类, 在调用具体方法前调用InvokeHandler来处理. 2.CGLiB动态代 ...

  8. TCP&UDP基础

    TCP TCP/IP是一种网络通讯协议,而socket则是TCP/IP网络最为通用的API,即一种应用程序接口,称为套接字.TCP是面向连接的协议,在进行数据收发前必须连接,且在收发时必须保持该连接. ...

  9. 微信小程序 功能函数 支付接口

    // 订单生成返回数据,弹出是否支付模态 wx.showModal({ title: '微信支付', content: '确定支付吗?', success: function (res) { if ( ...

  10. Task的运行原理和工作窃取

    在net4.0以前,当调用ThreadPool.QueueUserWorkItem方法往线程池中插入作业时,会把作业内容(其实就是一个委托)放到线程池中的一个全局队列中,然后线程池中的线程按照先进先出 ...