python爬蟲自動更換ip_Python 爬蟲使用動態切換ip防止封殺

對于爬蟲被封禁 ! 爬蟲一般來說只要你的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'}]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/542446.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542446.shtml
英文地址,請注明出處:http://en.pswp.cn/news/542446.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux nohup不生成日志,linux重定向及nohup不輸出的方法

FreeBSD可以同時運行多個進程,在shell下直接輸入命令后,shell將進程放到前臺執行。如果要將進程放到后臺執行,需要在命令行的結尾加上一個 “&” 符號。下面的命令從后臺執行,從ftp.isc.org下載文件。$ fetch ftp://ftp.isc.o…

Java BigInteger類| 帶實例的splitAndRemainder()方法

BigInteger類divideAndRemainder()方法 (BigInteger Class divideAndRemainder() method) divideAndRemainder() method is available in java.math package. splitAndRemainder()方法在java.math包中可用。 divideAndRemainder() method returns BigInteger array of 2 elemen…

SpringMVC Mybatis Shiro RestTemplate的實現客戶端無狀態驗證及訪問控制【轉】

2019獨角獸企業重金招聘Python工程師標準>>> A.首先需要搭建SpringMVCShiro環境 a1.pom.xml配置 spring: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>4.1.0.RELEAS…

sql服務器默認密碼_搭建一個DNS服務器,輕松實現域名解析內容分發,訪問速度提高N倍...

DNS服務器&#xff0c;Domain Name Server&#xff0c;域名解析服務器&#xff0c;互聯網上相互通信使用的是IP&#xff0c;但是IP是又長又臭又難記&#xff0c;所以創造了域名來解決IP難寫難記的問題&#xff0c;記一個g.cn比203.208.50.127強過不知多少倍了。有了域名&#x…

在C ++ STL中使用string :: to_string()將數字轉換為字符串

to_string() is a library function of <string> header, it is used to convert numeric value (number) to string. to_string()是<string>標頭的庫函數&#xff0c;用于將數值(數字)轉換為字符串。 Syntax: 句法&#xff1a; string to_string(numberic_value…

門級建模

學習目標 學習Verilog提供的門級原語 理解門的實例引用、門的符號以及and/or&#xff0c;buf/not類型的門的真值表 學習如何根據電路的羅技圖來生成Verilog描述 講述門級設計中的上升、下降和關斷延遲 解釋門級設計中的最小、最大和典型延遲 1.門的類型 1.1與門&#xff08;and…

linux .net 控制臺應用程序,VisualStudioCode創建的asp.net core控制臺程序部署到linux

1、asp.net core控制臺程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、發布發布前&#xff0c;修改test2.csproj文件(項目名稱為test2)Exenetcoreapp2.1centos.7-x64主要添…

數組長度屬性以及JavaScript中的示例

JavaScript長度屬性 (JavaScript length property) length property is used to get and set the length of an array in JavaScript. length屬性用于獲取和設置JavaScript中數組的長度。 Syntax to get the length of an array: 獲取數組長度的語法&#xff1a; array_name.…

怎么挖linux內核的漏洞,linux內核漏洞分析實戰看看專家是怎么一步步...-卓優商學院問答...

推薦回答Linux內核調試方法kdb&#xff1a;只能在匯編代碼級進行調試&#xff1b;優點是不需要兩臺機器進行調試。gdb&#xff1a;在調試模塊時缺少一些至關重要的功能&#xff0c;它可用來查看內核的運行情況&#xff0c;包括反匯編內核函數。kgdb&#xff1a;能很方便的在源碼…

COGS182 [USACO Jan07] 均衡隊形[RMQ]

182. [USACO Jan07] 均衡隊形 ★★ 輸入文件&#xff1a;lineup.in 輸出文件&#xff1a;lineup.out 簡單對比時間限制&#xff1a;4 s 內存限制&#xff1a;128 MB 題目描述 農夫約翰的 N (1 ≤ N ≤ 50,000) 頭奶牛&#xff0c;每天擠奶時總會按同樣的順序站好。一日…

string中concat_JavaScript中帶示例的String concat()方法

string中concat字符串concat()方法 (String concat() Method) concat() is a string method in JavaScript, it is used to concatenate (join) two or more strings and returns a new joined string. concat()是JavaScript中的字符串方法&#xff0c;用于連接(聯接)兩個或多個…

linux全自動備份網站到百度云盤,Linux定時備份數據到百度云盤(示例代碼)

導讀&#xff1a;如今的百度云盤免費容量都是2T了&#xff0c;即使把電腦上所有的東東都放上去&#xff0c;也還有大把的剩余空間。對于站長來說&#xff0c;是完全可以充分利用這些硬盤空間的&#xff0c;現在我們就用百度云盤來備份Linux服務器上的數據。一直在想&#xff0c…

python dict底層實現_dict實現原理和哈希表

dict底層實現在Python中&#xff0c;字典是依靠散列表或說哈希表(Hash Table)進行實現的&#xff0c;使用開放地址法解決沖突。所以其查找的時間復雜度會是O(1)&#xff0c;下文會具體講解哈希表的工作原理和解決沖突時的具體方法。也就是說&#xff0c;字典也是一個數組&#…

網際控制報文協議icmp_網絡中的ICMP(Internet控制消息協議)

網際控制報文協議icmpICMP(Internet控制消息協議)簡介 (Introduction to ICMP (Internet Control Message Protocol)) IP (Internet Protocol) is a network layer protocol. The responsibility of delivering data (Logical Addressing) to any network is done by the IP (I…

談色

最近很苦惱&#xff0c;像是到了男人的生理期&#xff0c;或者說是類似動物的發情期&#xff0c;見到露長腿的女人總喜歡看。 其實我是并不喜歡這樣盯著看&#xff0c;或許是男人的本色&#xff0c;十個男人九個色的本性&#xff0c;總是會不自覺的去偷看&#xff0c;更有甚者還…

linux系統怎樣寫單片機程序,單片機知識是Linux驅動開發的基礎之一以及如何學單片機...

這是arm裸機1期加強版第1課第2、3節課程的wiki文字版。為什么沒前途也要學習單片機&#xff1f;因為它是個很好的入口。學習單片機可以讓我們拋開復雜的軟件結構&#xff0c;先掌握硬件操作&#xff0c;如&#xff1a;看原理圖、芯片手冊、寫程序操作寄存器等。在上一節視頻里&…

python教程循環語句_Python教程:關于Python 循環語句

Python 循環語句本章節將向大家介紹Python的循環語句&#xff0c;程序在一般情況下是按順序執行的。編程語言提供了各種控制結構&#xff0c;允許更復雜的執行路徑。循環語句允許我們執行一個語句或語句組多次&#xff0c;下面是在大多數編程語言中的循環語句的一般形式&#x…

math.pow int_Java Math類static int min(int i1,int i2)與示例

math.pow int數學類靜態int min(int i1&#xff0c;int i2) (Math Class static int min(int i1 , int i2) ) This method is available in java.lang package. 此方法在java.lang包中可用。 This method is used to return the minimum one of both the given arguments or in…

bat 批處理 常用命令和亂碼問題

為什么80%的碼農都做不了架構師&#xff1f;>>> rem echo off ECHO OFF XCOPY E:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷貝Failure IF ERRORLEVEL 0 ECHO 文件拷貝Success :start set /p first"1記事本,2遠程:" if %first% LEQ 2 (IF %first% …

SuperMap iServer發布的ArcGIS REST 地圖服務如何通過ArcGIS API加載

作者&#xff1a;yx 文章目錄 一、發布服務二、代碼加載三、結果展示 一、發布服務 SuperMap iServer支持將地圖發布為ArcGIS REST地圖服務&#xff0c;您可以在發布服務時直接勾選ArcGIS REST地圖服務&#xff0c;如下圖所示&#xff1a; 也可以在已發布的地圖服務中&#x…