1. 程式人生 > >Python爬蟲IP代理池的建立和使用

Python爬蟲IP代理池的建立和使用

正如在上一篇博文中提到的那樣,同一個IP針對一個網站短時間內大量的訪問通常會導致IP被封,除了在爬取資料時增加延遲(爬取量不大或者對爬取速度沒要求),還有一個好方法就是使用代理IP,這樣就可以完美解決IP被封的問題。

那麼,問題來了,代理的IP從哪兒來呢,土豪自然隨意,直接淘寶買一些代理IP就好,穩定也不是特別貴。但對於技術愛好者,也許並沒有那個需求,其實網上還是有很多免費的代理IP的,隨意開啟百度一搜就是,選擇第一個不是廣告的網站為例


可以看到,選擇還是蠻多的,那麼我們就從這個網站上抓取一些代理IP來使用吧,它的網址結構是'http://www.xicidaili.com/nn/'+PageNumber,每頁有50個代理IP,可以很方便的用for迴圈來爬取所有代理IP。檢視網頁原始碼,發現所有的IP和埠都在<tr class

="">下第二個和第三個td類下,結合BeautifulSoup可以很方便地抓取資訊,原始碼如下

  1. import urllib2  
  2. from bs4 import BeautifulSoup  
  3. import csv  
  4. def IPspider(numpage):  
  5.     csvfile = file('ips.csv''wb')    
  6.     writer = csv.writer(csvfile)  
  7.     url='http://www.xicidaili.com/nn/'
  8.     user_agent='IP'
  9.     headers={'User-agent':user_agent}  
  10.     for
     num in xrange(1,numpage+1):  
  11.         ipurl=url+str(num)  
  12.         print'Now downloading the '+str(num*100)+' ips'
  13.         request=urllib2.Request(ipurl,headers=headers)  
  14.         content=urllib2.urlopen(request).read()  
  15.         bs=BeautifulSoup(content,'html.parser')  
  16.         res=bs.find_all('tr')  
  17.         for
     item in res:  
  18.             try:  
  19.                 temp=[]  
  20.                 tds=item.find_all('td')  
  21.                 temp.append(tds[1].text.encode('utf-8'))  
  22.                 temp.append(tds[2].text.encode('utf-8'))  
  23.                 writer.writerow(temp)  
  24.             except IndexError:  
  25.                     pass
  26. #假設爬取前十頁所有的IP和埠
  27. IPspider(10)  
這樣就爬到了1000個代理IP和埠,當然了,免費也有免費的壞處,那就是並不是所有的代理IP都可以用,所以我們需要檢查一下哪些IP是可以使用的。如何檢查該IP是否可用,我們就看連上代理後能不能在2秒內開啟百度的頁面,如果可以,則認為IP可用,新增到一個list裡供後面備用,實現程式碼如下。
  1. import socket  
  2. def IPpool():  
  3.     socket.setdefaulttimeout(2)  
  4.     reader=csv.reader(open('ips.csv'))  
  5.     IPpool=[]  
  6.     for row in reader:  
  7.         proxy=row[0]+':'+row[1]  
  8.         proxy_handler=urllib2.ProxyHandler({"http":proxy})  
  9.         opener=urllib2.build_opener(proxy_handler)  
  10.         urllib2.install_opener(opener)  
  11.         try:  
  12.             html=urllib2.urlopen('http://www.baidu.com')  
  13.             IPpool.append([row[0],row[1]])  
  14.         except Exception,e:  
  15.             continue
  16.     return IPpool  
這樣的話,就取得了一系列可用的IP代理,配合之前的爬蟲使用,就不太容易出現IP被封的情況了,不過在目前這種情況下,驗證IP所需要的時間太久,所以可以採用多執行緒或者多程序的方法來進一步提高效率,我會在下一篇寫一個抓取所有職位的詳細資訊的爬蟲中詳細講到。

當然,如果有更好的驗證IP可用性的方法,請告訴我,我總覺得用開啟網站的方法很蠢,而且效率也不高。

相關推薦

Python爬蟲IP代理建立使用

正如在上一篇博文中提到的那樣,同一個IP針對一個網站短時間內大量的訪問通常會導致IP被封,除了在爬取資料時增加延遲(爬取量不大或者對爬取速度沒要求),還有一個好方法就是使用代理IP,這樣就可以完美解決IP被封的問題。那麼,問題來了,代理的IP從哪兒來呢,土豪自然隨意,直接淘寶

Python 爬蟲IP代理

想必大家在寫爬蟲都有遇到過這樣的錯誤: UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte 經過查詢各大論壇發現原來是該網站對網頁進行了壓縮,

自己搭建億級爬蟲IP代理

做爬蟲抓取時,我們經常會碰到網站針對IP地址封鎖的反爬蟲策略。但只要有大量可用的IP資源,問題自然迎刃而解。 以前嘗試過自己抓取網路上免費代理IP來搭建代理池,可免費IP質量參差不齊,不僅資源少、速度慢,而且失效快,滿足不了快速密集抓取的需求。 收費代理提供的代理資源質量明顯提升,經過多家測試,

爬蟲ip代理新建(使用芝麻ip代理

如果真入職爬蟲工程師職位後,真正做爬蟲爬取資料的過程,將會使用大量的ip做ip替換,否則很容易被封ip,導致資料獲取無法持續下去。 而現在市面上的免費代理其實很多都是無效的,或者持續效果很低效的。因此需要找到一個穩定高效且效果不錯的代理商。 現在我就把自己目前使用的ip代理和自己獲取代理使用

python學習 —— 建立IP代理

圖片 端口 position except app rtl 分享圖片 ipp use   代碼: from bs4 import BeautifulSoup from requests import Session, get, post from time imp

Python爬蟲ip代理

clas 檢查 isp turn pre image 小白 flat for 可能在學習爬蟲的時候,遇到很多的反爬的手段,封ip 就是其中之一。 對於封IP的網站。需要很多的代理IP,去買代理IP,對於初學者覺得沒有必要,每個賣代理IP的網站有的提供了免

【Python3爬蟲】Scrapy使用IP代理隨機User-Agent

findall 4.3 sdch 5.0 agen and 由於 付費 status 在使用爬蟲的時候,有時候會看到由於目標計算機積極拒絕,無法連接...,這就是因為我們的爬蟲被識別出來了,而這種反爬蟲主要是通過IP識別的,針對這種反爬蟲,我們可以搭建一個自己的IP代理池,

python 反爬總結(1)- 限制IP UA 的解決方法,修改headers新增IP代理

在學習python爬蟲的過程中,遇到各種反爬機制,個人總結了一下: 對同樣的ip或User-Agent進行限制, 對頻繁訪問的ip進行限制, 設定登陸限制, 設定驗證碼, 設定Ajax載入頁面。 目前小白我也就瞭解這麼多,其中驗證碼的反反爬還在學習當中,學無止境啊 &

python爬蟲設定代理ip——方法(一)

"""在使用python爬蟲的時候,經常會遇見所要爬取的網站採取了反爬取技術,高強度、高效率地爬取網頁資訊常常會給網站伺服器帶來巨大壓力,所以同一個IP反覆爬取同一個網頁,就很可能被封,那如何解決呢?使用代理ip,設定代理ip池。以下介紹的免費獲取代理ip池的方法:優點:1.

centos7生產環境IP代理python

.py openssl href snappy ttext ima sna make per 最近在研究爬蟲,需要在前面部署IP代理池,於是在開源中國找到proxy pool。可以自動抓取國內幾個免費IP代理網站的IP,並實時校驗IP的可用性,數據庫為SSDB。IP代理池網

建立自己的IP代理[爬取西刺代理]

一:基本引數和匯入的包 import requests import re import random url = 'http://www.xicidaili.com/nn' headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64)

使用ip代理爬蟲時,requests模組get請求出現問題_AttributeError: 'str' object has no attribute 'get'

問題描述:專案使用ip代理池對網頁進行資料爬取,但是requests模組get方法出現問題,出錯如下:   File "E:\project\venv\lib\site-packages\requests\api.py", line 75, in get     r

python爬取身份證資訊、爬取ip代理

  匹配的分類 按照匹配內容進行匹配               我們在匹配的過程當中,按照要匹配的內容的型別和數量進行匹配  &nb

Java網路爬蟲(七)--實現定時爬取與IP代理

定點爬取 當我們需要對金融行業的股票資訊進行爬取的時候,由於股票的價格是一直在變化的,我們不可能手動的去每天定時定點的執行程式,這個時候我們就需要實現定點爬取了,我們引入第三方庫quartz的使用: package timeutils; imp

Python搭建自己的ip代理學習總結

    剛剛學習了爬蟲入門爬取小說,覺得那是不夠的,很多時候你僅僅偽裝成瀏覽器是解決不了問題的,還需要解決別人封你的ip的問題,所以我又學習瞭如何爬蟲是更換自己的ip,想要有足夠的ip來供你更換,一定得先搭建你的ip代理池,那麼我們就先搭建自己的ip代理池。 &nb

Scrapy加Redis加IP代理實現音樂爬蟲

音樂爬蟲 目的:爬取歌名,歌手,歌詞,歌曲url。 一、建立爬蟲專案 建立一個資料夾,進入資料夾,開啟cmd視窗,輸入: scrapy startproject songSpider 依次輸入: cd songSpider scrapy

Python爬蟲設定代理IP爬取知乎圖片

本文接著前面兩文中提到的內容來繼續完善我們的Python爬蟲。上文地址:通過Python爬蟲爬取知乎某個問題下的圖片 設定代理的方式很簡單,可以看看這裡Requests的官方文件,這裡也有對應的中文版介紹,點選開啟連結 先簡單說下requests代理的使用,摘自上述提到的文

python scrapy ip代理的設置

服務器 在那 odi 文件名 import 用戶名 代理 文件 代理服 在scrapy項目中建一個與spider同級的python目錄並在下面添加一個py文件內容為 # encoding: utf-8import base64proxyServer = 代理服務器地址 ##

ip代理-基於mongodb數據庫

url upd tostring mls from path ida request protocol 代碼用的python2.7,抓取xici免費代理,檢測放入數據庫中,為以後爬蟲做準備。下面直接上代碼 1 #-*-encoding=utf-8-*- 2 3 i

反反爬蟲 IP代理

ini home 過多 頻繁 寬帶 odi 代理ip com 曲線 0x01 前言 一般而言,抓取稍微正規一點的網站,都會有反爬蟲的制約。反爬蟲主要有以下幾種方式: 通過UA判斷。這是最低級的判斷,一般反爬蟲不會用這個做唯一判斷,因為反反爬蟲非常容易,直接隨機UA即可解決