对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的。 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云。 其实就算他们不考虑seo搜索优化,用ajax渲染网页数据,我也可以用webkit浏览器组件来搞定ajax之后的数据。

如果某个网站他就是闲的蛋疼,他就是喜欢从log里面,一行行的分析出你的ip,然后统计处频率高的网站, 那这个时候咋办?   其实方法很草比,就是用大量的主机,但是大量的主机是有了,你如果没有那么爬虫的种子量,那属于浪费资源… …  其实一个主机,多个ip是可以的。。。

这个时候是有两种方法可以解决的,第一个是用squid绑定多个ip地址,做正向代理…. 你的程序里面维持一组连接池,就是针对这几个正向proxy做的连接池。

正向代理和反向代理最大的区别就是,反向代理很多时候域名是固定的,而正向代理是通过一个http的代理端口,随意访问,只是在proxy端会修改http协议,去帮你访问

如果是python,其实单纯调用socket bind绑定某个ip就可以了,但是标题的轮训是个什么概念,就是维持不同的socket bind的对象,然后你就轮吧 !   跟一些业界做专门做爬虫的人聊过,他们用的基本都是这样的技术。

# -*- coding=utf-8 -*-

import socket

import urllib2

import re

true_socket = socket.socket

ipbind='xx.xx.xxx.xx'

def bound_socket(*a, **k):

sock = true_socket(*a, **k)

sock.bind((ipbind, 0))

return sock

socket.socket = bound_socket

response = urllib2.urlopen('http://www.ip.cn')

html = response.read()

ip=re.search(r'code.(.*?)..code',html)

print ip.group(1)

在http://stackoverflow.com/ 上也找到一些个老外给与的解决方法的思路,他是借助于urllib2的HTTPHandler来构造的出口的ip地址。

import functools

import httplib

import urllib2

class BoundHTTPHandler(urllib2.HTTPHandler):

def __init__(self, source_address=None, debuglevel=0):

urllib2.HTTPHandler.__init__(self, debuglevel)

self.http_class = functools.partial(httplib.HTTPConnection,

source_address=source_address)

def http_open(self, req):

return self.do_open(self.http_class, req)

handler = BoundHTTPHandler(source_address=("192.168.1.10", 0))

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

import functools

import httplib

import urllib2

class BoundHTTPHandler(urllib2.HTTPHandler):

def __init__(self, source_address=None, debuglevel=0):

urllib2.HTTPHandler.__init__(self, debuglevel)

self.http_class = functools.partial(httplib.HTTPConnection,

source_address=source_address)

def http_open(self, req):

return self.do_open(self.http_class, req)

handler = BoundHTTPHandler(source_address=("192.168.1.10", 0))

opener = urllib2.build_opener(handler)

urllib2.install_opener(opener)

那么就有一个现成的模块 netifaces  ,其实netifaces模块,就是刚才上面socket绑定ip的功能封装罢了

地址:   https://github.com/raphdg/netifaces

import netifaces

netifaces.interfaces()

netifaces.ifaddresses('lo0')

netifaces.AF_LINK

addrs = netifaces.ifaddresses('lo0')

addrs[netifaces.AF_INET]

[{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]

import netifaces

netifaces.interfaces()

netifaces.ifaddresses('lo0')

netifaces.AF_LINK

addrs = netifaces.ifaddresses('lo0')

addrs[netifaces.AF_INET]

[{'peer': '127.0.0.1', 'netmask': '255.0.0.0', 'addr': '127.0.0.1'}]

python爬虫自动更换ip_Python 爬虫使用动态切换ip防止封杀相关推荐

  1. Python定时自动更换电脑壁纸

    周末好!难得放假,今天的你是不是一觉睡到大中午了?不要有愧疚感,现在的年轻人压力实在太大,好好睡上一觉已经是一件很奢侈的事情了,就给自己好好放个假吧! 在这难得的休闲时光,我们也不整那些太复杂的话题, ...

  2. java实现在Linux系统中动态切换IP

    java实现在Linux系统中动态切换IP 本文提供了一个可以在linux系统中,使用Java代码切换本地IP地址的方案: Tips: 1.本程序用于在Linux服务器上切换IP,在windows上无 ...

  3. python爬虫使用代理ip_python爬虫如何设置代理ip

    python爬虫设置代理ip的方法:首先写入获取到的ip地址到proxy:然后用百度检测ip代理是否成功,并请求网页传的参数:最后发送get请求,并获取返回页面保存到本地. [相关学习推荐:pytho ...

  4. 爬虫或恶意攻击,如何动态屏蔽IP地址?

    背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单.对于黑名单之内的 IP ,拒绝提供服务. 架构 实现 IP 黑名单的功能有很多途径: 1.在操作系统层面,配置 ...

  5. 百度域名解析API+python实现百度云DDNS功能绑定动态公网ip

    背景:前段时间,朋友为了使用NAS服务,开通了电信的动态公网IP,也就是那种公网IP地址会定期变化,重启光猫也会导致IP变化,朋友的水星低端路由器支持花生壳DDNS,去花生壳官网申请服务后能够正常使用 ...

  6. android 输入法更换_一种动态切换Android系统输入法的弹出模式的方法与流程

    本发明涉及一种Android系统利用动态切换输入法的弹出模式解决输入法跳闪抖动问题的方法,属于安卓系统技术领域. 背景技术: 随着Android系统的快速发展以及安卓手机的不断普及,基于Android ...

  7. python京东自动签到_爬虫实战【10】利用Selenium自动登陆京东签到领金币

    今天我们来讲一下如何通过python来实现自动登陆京东,以及签到领取金币. 如何自动登陆京东? 我们先来看一下京东的登陆页面,如下图所示: [插入图片,登陆页面] 登陆框就是右面这一个框框了,但是目前 ...

  8. vue 启动项目时动态切换 ip

    一般我们在开发的过程中,根据部署的环境不同可能会使用多个ip,这时候就需要到配置文件中更改ip,然后重启项目,但是这样做会有点麻烦,不仅要修改配置文件,还需要重启项目.如果能够在启动项目时根据不同的命 ...

  9. Retrofit请求时动态切换IP

    创建BaseUrlInterceptor.java文件 import android.util.Log; import java.io.IOException; import java.util.Li ...

最新文章

  1. 外中断02 - 零基础入门学习汇编语言70
  2. mac pip安装mysql_Mac pip安装mysql-python失败
  3. 查看matlab当前路径,MATLAB R2012a 的当前路径和路径搜索
  4. 计算机网络领悟摩尔定,计算机网络等133信息技术展望P15-P17.PPT
  5. FusionCharts的使用方法
  6. vc++2010学习版注册码分享
  7. 变编程用户输入月份,判断这个月份是属于哪个季节?
  8. element-ui图标显示不出来问题
  9. 海光服务器型号,中科海光CPU的首次评测:基于AMD架构,覆盖桌面服务器端
  10. OSChina 周五乱弹 ——一句话总结程序员的2017
  11. CSP拼图问题--矩阵快速幂
  12. 和小鲜肉相比,老程序员该由哪些优势?
  13. 11微服务认证与授权
  14. 古道西风,我是那绝望的断肠人
  15. css 设置div的宽度根据内容自适应
  16. 金额:元与分之间转换
  17. 场内货币基金投资交易攻略:所有产品对比
  18. 阶乘 最后一个不为0的数
  19. 解决ios 页面回弹
  20. 汽车电子学习笔记---LIN

热门文章

  1. es 删除重复数据_怎么标识并删除SPSS数据库里的“重复个案”?
  2. php 栈实现历史记录后退,栈:如何实现浏览器的前进和后退功能
  3. @SpringBootApplication揭秘
  4. JDK源码解析之 java.lang.Throwable
  5. HTTP 视频怎么在 MIP 页面中使用?
  6. 简单类及成员实例【C#】
  7. (十三)java版spring cloud+spring boot+redis社交电子商务平台-springboot集成spring cache...
  8. 看完动画你还敢说不会 快速排序
  9. 市场压力只有老板扛?柏明顿阿米巴如何传递经营压力
  10. 常用压缩,解压与打包