爬虫实战【13】获取自己的动态代理ip池

在爬取一些比较友好的网站时,仍然有可能因为单位时间内访问次数过多,使服务器认定为机器访问,导致访问失败或者被封。如果我们使用不同的ip来访问网站的话,就可以绕过服务器的重复验证,使服务器以为使不同的人在访问,就不会被封了。

如何获取动态ip

网络上有很多提供代理ip的网站,我们经常使用的一个是西刺免费代理ip,url='http://www.xicidaili.com/'

我们来看一下这个网站的构成:

【插入图片,西刺代理页面】

我们获取这个页面上的所有ip即可。

一个合理的代理ip的格式是这样的:

  1. {'http':'http://106.46.136.112:808'}

也就是说每个代理是一个字典,这个字典中可以有很多个ip,每个代理ip都是以http为key。当然考虑到字典的特性,如果我们只获取http为key的代理,那么这个字典中只能有一个元素。

我们就简单点,只考虑http的情况。

通过PyQuery来解析西刺的源代码,所有的ip都在一个tr里面,但是有些tr是标题,我们过滤一下就可以了。

由于页面比较简单,这里就不做介绍了。

如何使用代理ip

我们以requests库为例:

  1. import requests
  2. #这个字典可以只有一个键值对,如果只考虑http的情况
  3. proxies = {
  4. "http": "http://10.10.1.10:3128",
  5. "https": "http://10.10.1.10:1080"
  6. }
  7. requests.get("http://example.org", proxies=proxies)

全部代码

西刺也是有访问限制的,短时间内多次访问会被封锁,所以最好的办法是每个一个小时访问一下,将所有的代理ip保存到本地。

每次需要ip的时候从本地获取。

在下面的例子中,我们先获取到一个ip池,当然是文本格式的,然后短时间内访问了200次豆瓣主页,都成功了。

  1. import requests
  2. from pyquery import PyQuery
  3. import random
  4. def get_ip_page():
  5. url = 'http://www.xicidaili.com/'
  6. headers = {
  7. 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0'
  8. } # 不加请求头信息还不能获取到源代码信息
  9. response = requests.get(url, headers=headers)
  10. try:
  11. if response.status_code == 200:
  12. # print(response.text)
  13. return response.text
  14. except Exception:
  15. print('获取ip出错!')
  16. def parse_save_ip():
  17. html = get_ip_page()
  18. doc = PyQuery(html)
  19. even_ips = doc('tr').items()
  20. result = []
  21. try:
  22. for item in even_ips:
  23. ip = item.find('td').eq(1).text()
  24. port=item.find('td').eq(2).text()
  25. # http=item.find('td').eq(5).text()
  26. # proxy_ip={http:ip}
  27. # result.append(proxy_ip)
  28. if ip != '':
  29. # print(ip)
  30. result.append('http://'+ip+':'+port)
  31. except Exception:
  32. pass
  33. with open('proxy.csv','w') as f:
  34. for item in result:
  35. f.write(item)
  36. def get_random_ip():
  37. #短时间内连续访问多次会被封住,将获取的代理ip存到本地,每个小时获取1次即可。
  38. with open('proxy.csv','r') as f:
  39. ips=f.readlines()
  40. random_ip = random.choice(ips)
  41. proxy_ip = {'http': random_ip}
  42. return proxy_ip
  43. def how_to_use_proxy(proxy):
  44. url='https://www.douban.com/'
  45. webdata=requests.get(url=url,proxies=proxy)
  46. print(webdata)
  47. def main():
  48. proxy = get_random_ip()
  49. print(proxy)
  50. how_to_use_proxy(proxy)
  51. if __name__ == '__main__':
  52. parse_save_ip()
  53. for i in range(200):
  54. main()
  55. print('第%d次访问成功!'%(i+1,))

爬虫实战【13】获取自己的动态代理ip池的更多相关文章

  1. 做了一个动态代理IP池项目,邀请大家免费测试~

    现在出来创业了,目前公司在深圳. 做了啥呢, 做了一个动态代理 IP 池项目 现在邀请大家免费测试体验! 免费激活码:关注微信公众号:2808proxy (每人每天限领一次噢~) 网站:https:/ ...

  2. Python爬虫代理IP池

    目录[-] 1.问题 2.代理池设计 3.代码模块 4.安装 5.使用 6.最后 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代 ...

  3. scrapy-redis+selenium+webdriver解决动态代理ip和user-agent的问题(全网唯一完整代码解决方案)

    问题描述:在爬取一些反爬机制做的比较好的网站时,经常会遇见一个问题就网站代码是通过js写的,这种就无法直接使用一般的爬虫工具爬取,这种情况一般有两种解决方案 第一种:把js代码转为html代码,然后再 ...

  4. 【python3】如何建立爬虫代理ip池

    一.为什么需要建立爬虫代理ip池 在众多的网站防爬措施中,有一种是根据ip的访问频率进行限制的,在某段时间内,当某个ip的访问量达到一定的阀值时,该ip会被拉黑.在一段时间内被禁止访问. 这种时候,可 ...

  5. 建立爬虫代理IP池

    单线程构建爬虫代理IP池 #!/usr/bin/python3.5 # -*- coding:utf-8 -*- import time import tempfile from lxml impor ...

  6. 构建一个给爬虫使用的代理IP池

    做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...

  7. python爬虫构建代理ip池抓取数据库的示例代码

    爬虫的小伙伴,肯定经常遇到ip被封的情况,而现在网络上的代理ip免费的已经很难找了,那么现在就用python的requests库从爬取代理ip,创建一个ip代理池,以备使用. 本代码包括ip的爬取,检 ...

  8. 爬虫入门到放弃系列05:从程序模块设计到代理IP池

    前言 上篇文章吧啦吧啦讲了一些有的没的,现在还是回到主题写点技术相关的.本篇文章作为基础爬虫知识的最后一篇,将以爬虫程序的模块设计来完结. 在我漫(liang)长(nian)的爬虫开发生涯中,我通常将 ...

  9. springboot实现java代理IP池 Proxy Pool,提供可用率达到95%以上的代理IP

    一.背景 前段时间,写java爬虫来爬网易云音乐的评论.不料,爬了一段时间后ip被封禁了.由此,想到了使用ip代理,但是找了很多的ip代理网站,很少有可以用的代理ip.于是,抱着边学习的心态,自己开发 ...

随机推荐

  1. ubuntu 配置git公钥

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 一 . 设置Git的user name和email: $ git ...

  2. Python基本数据类型之list列表

    列表是python中用的非常频繁的数据结构,它是有序序列.之前学的字符串就是一种有序序列.不过列表是可变的. 创建列表 li = list( )                          #构 ...

  3. [Qt5] 减少dll依赖和大小(特别是webkit的大小和依赖)

    Qt5的依赖太多, 而且很dll非常大. 折腾了好久, 摸索了一些精简的方法. webkit是个非常蛋疼的东西, 依赖超多, 又很庞大. 所以需不需要webkit是完全不同的. 如何编译Qt5可以参考 ...

  4. Windows下svn客户端和服务器的安装使用

    svn,全称subversion, 是目前用的较多的开源的版本管理工具.相信有些经历的程序员应该都听说过它. 通常的svn服务器是搭建在Linux中,不过如果作为个人或者单个小组使用的话,就可以把sv ...

  5. 堆排序(Heap Sort)的C语言实现

    堆排序(Heap Sort)具体步骤为 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆 将顶部元素与堆尾数组交换,此是末尾元素就是最大值, ...

  6. N - Picture - poj 1177(扫描线求周长)

    题意:求周长的,把矩形先进行融合后的周长,包括内周长 分析:刚看的时候感觉会跟棘手,让人无从下手,不过学过扫描线之后相信就很简单了吧(扫描线的模板- -),还是不说了,下面是一精确图,可以拿来调试数据 ...

  7. inline-block及解决空白间距

    參考:http://www.jb51.net/css/76707.html http://www.webhek.com/remove-whitespace-inline-block/ inline-b ...

  8. 【转载】接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点

    来源: http://www.cnblogs.com/asxinyu/p/Basic_Matlab_Experience.html 接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些 ...

  9. Shell命令-文件及内容处理之head、tail

    文件及内容处理 - head.tail 1. head:显示文件内容头部 head命令的功能说明 head 命令用于显示文件头部内容,默认执行 head 命令会输出文件开头的 10 行. head命令 ...

  10. express 中间件

    [express 中间件] 中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 ...

(0)

相关推荐

  • 女友刷B站流量告急,技术男友轻松搞定!

    来源:Python 技术「ID: pythonall」 B 站大家都熟悉,尤其是它的舞蹈区.有 100W+ 的舞蹈视频.在没有 wifi 的情况下,就欣赏不了这些视频了.作为一个 python 程序员 ...

  • Python Requests Pytest YAML Allure实现接口自动化

    作者:wintest 链接:https://www.cnblogs.com/wintest/p/13423231.html 本项目实现接口自动化的技术选型:Python+Requests+Pytest ...

  • 当语音助手遇到机器人

    来源:Python 技术「ID: pythonall」 当语音助手遇到机器人 大家都知道现在智能手机都有语音助手,Mac 有 Siri,Windows 有小冰,那么这些语音助手遇到机器人会发生哪些有趣 ...

  • pyquery一些自定义的用法

    昨天在YouTube上看到PyQuery一些自定义的用法的视频,觉得很不错,就整理一下作为本期的内容. 访问网址 PyQuery与BeautifulSoup对比,我们会发现PyQuery可以对网址发起 ...

  • 教你自己搭建一个ip池(绝对超好用!!!!)

    随着我们爬虫的速度越来越快,很多时候,有人发现,数据爬不了啦,打印出来一看. 不返回数据,而且还甩一句话 是不是很熟悉啊? 要想想看,人是怎么访问网站的? 发请求,对,那么就会带有 request.h ...

  • 爬虫爬取代理ip

    import urllib.request from bs4 import BeautifulSoup import re import time import random # ---------- ...

  • gevent:异步理论与实战

    gevent库中使用的最核心的是Greenlet-一种用C写的轻量级python模块.在任意时间,系统只能允许一个Greenlet处于运行状态.那怎么让程序高并发,从而实现程序高效运行呢? 这就是我们 ...

  • Excel实战技巧2:创建动态命名区域的3个公式

    什么是动态命名区域? 指定一个名称代表某单元格区域,当在该区域中添加或者删除行或列时,这个名称代表的区域会自动调整,我们称之为动态命名区域. 下面,介绍创建动态命名区域的3个公式. 公式1:使用OFF ...

  • Python实现数据技术|爬虫便可获取免费百度文库付费文档

    相信大家在百度文档中看到了比较合适的文档之后就有了想下载学习一下的想法,但是有些时候文章更多的需要付费下载,针对于文档中能发现语句是分为一个一个的标签中的文本进行输出的.如果你有耐心和任劳任怨的想法, ...

  • .NET 下基于动态代理的 AOP 框架实现揭秘

    Intro 之前基于 Roslyn 实现了一个简单的条件解析引擎,想了解的可以看这篇文章 https://www.cnblogs.com/weihanli/p/roslyn-based-conditi ...

  • Python爬虫实战教学:爬取电影视频数据

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 做了一些小项目,用的技术和技巧会比较散比较杂,写一个小品文记录一下,帮助熟悉. 需求:经常在腾讯视 ...

  • 91花套路贷案宣判,宝付关联公司新颜被指向其出售爬虫软件用于获取手机运营商和淘宝支付宝信息

    蓝鲸财经旗下,专注互联网金融领域独家报道,大大集团.中晋.快鹿.链家金融.海通布局互金等独家线索均已10万+并引起大量媒体跟进.蓝鲸是重要财经资讯门户+财经记者工作平台,拥有150家媒体传播资源,每天 ...

  • 全网最详细的爬虫实战教学

    转载自:小一的学习笔记 今天要分享的教程是爬取各大城市的二手房数据,抛开以前的文章不谈,下面的内容应该足够你实现这篇爬虫.以下是正文: 一.确定目标 今天我们的目标官网链接是链家网 ok,前提条件交代 ...

  • 一文读懂Java动态代理

    引言 最早的代理模式,我们大致可以联想到三国时期,孟德君挟天子以令诸侯是代理模式,是权利代理:现今生活中类似房产中介.票务中介是代理模式,是业务代理:还有翻墙浏览网页是代理模式,是VPN代理:回到我们 ...

  • Java动态代理设计模式

    本文主要介绍Java中两种常见的动态代理方式:JDK原生动态代理和CGLIB动态代理. 什么是代理模式 就是为其他对象提供一种代理以控制对这个对象的访问.代理可以在不改动目标对象的基础上,增加其他额外 ...