当前位置:首页 > CN2资讯 > 正文内容

python 动态修改 ip python爬虫动态更换ip

3天前CN2资讯

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

如果某个网站他就是闲的蛋疼,他就是喜欢从log里面,一行行的分析出你的ip,然后统计处频率高的网站, 那这个时候咋办?   其实方法很草比,就是用大量的主机,但是大量的主机是有了,你如果没有那么爬虫的种子量,那属于浪费资源… …  其实一个主机,多个ip是可以的。。。
这个时候是有两种方法可以解决的,第一个是用squid绑定多个ip地址,做正向代理…. 你的程序里面维持一组连接池,就是针对这几个正向proxy做的连接池。
正向代理和反向代理最大的区别就是,反向代理很多时候域名是固定的,而正向代理是通过一个http的代理端口,随意访问,只是在proxy端会修改http协议,去帮你访问
如果是python,其实单纯调用socket bind绑定某个ip就可以了,但是标题的轮训是个什么概念,就是维持不同的socket bind的对象,然后你就轮吧 !   跟一些业界做专门做爬虫的人聊过,他们用的基本都是这样的技术。 

1 import socket 2 import urllib2 3 import re 4 true_socket = socket.socket 5 6 ipbind='xx.xx.xxx.xx' 7 8 def bound_socket(*a, **k): 9 sock = true_socket(*a, **k) 10 sock.bind((ipbind, 0)) 11 return sock 12 13 socket.socket = bound_socket 14 15 response = urllib2.urlopen('http://www.ip.cn') 16 html = response.read() 17 ip=re.search(r'code.(.*?)..code',html) 18 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:///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'}]

 


    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/20229.html

    分享给朋友:

    “python 动态修改 ip python爬虫动态更换ip” 的相关文章

    探索韩国VPS服务:选择高性能低延迟的虚拟专用服务器

    在数字化迅猛发展的今天,韩国的VPS(虚拟专用服务器)越来越受到用户的青睐。许多企业和个人用户都开始关注这个区域,特别是那些需要稳定网站和应用程序的人。这篇文章将为你深入探讨韩国VPS的市场需求和背景,以及它在不同场景中的适用性。 首先,韩国VPS市场的兴起与其优越的网络基础设施密不可分。韩国位于东...

    域名购买推荐:如何选择最适合你的域名注册商

    域名购买推荐概述 在互联网时代,域名显得尤为重要。对于个人用户、企业甚至是初创团队来说,域名不仅是网站的门面,更是品牌形象和业务宣传的基石。记得我第一次建立网站时,选择一个合适的域名让我意识到它的价值。一个容易记住、与品牌相关的域名可以有效吸引流量,提升访问者的信任感。 在选购域名时,有几点基本原则...

    REST教程:掌握RESTful接口设计与开发最佳实践

    REST(Representational State Transfer)是一种架构风格,广泛应用于网络服务的设计。它强调通过标准的HTTP协议来实现资源的操作,设计简约而高效。在我学习RESTful接口的过程中,发现其核心特性尤其重要,包括无状态性、资源导向和统一接口等。这些特性不仅让开发变得更加...

    选择合适的SSH连接工具以提升远程管理效率和安全性

    在当今的网络环境中,SSH连接工具扮演着重要角色。简单来说,SSH连接工具是一种应用程序,用于通过SSH协议安全地连接和管理远程服务器。想想看,当我们需要与服务器进行交互、执行命令或者上传文件时,这些工具就变得尤为重要。 我记得第一次使用SSH连接工具的时候,是为了管理一台远程服务器。能够通过简单的...

    选择合适的国外域名与邮箱服务指南

    在现代社会,跨国沟通和商务往来变得愈加频繁,国外域名与邮箱成为不可或缺的工具。当我开始接触这些服务时,首先意识到国外域名的定义与特点,它们不仅代表着一个网站的身份,还是全球互联网上各类信息交流的桥梁。国外的域名通常以.com、.net等后缀结尾,这些域名能够覆盖广泛的用户群体,使得沟通更为流畅。 我...

    Windows SSH密钥登录:安装、配置及问题解决指南

    在现代计算环境中,SSH(Secure Shell)是一种重要的网络协议,它为安全远程登录提供了一种简便的解决方案。SSH允许用户通过不安全的网络访问远程计算机,确保数据传输过程中的安全性和完整性。对于那些需要远程连接服务器的用户来说,了解SSH的基本概念是非常必要的。 SSH不仅仅是一个远程登录工...