首頁  >  文章  >  後端開發  >  python爬取技術中的ip自動代理實例

python爬取技術中的ip自動代理實例

Y2J
Y2J原創
2017-04-21 15:22:592255瀏覽

最近為了考試打算抓取網上的軟考試題,在抓取中遇到一些問題,以下這篇文章主要介紹的是利用python爬取軟考試題之ip自動代理的相關資料,文中介紹的非常詳細,需要的朋友們下面來一起看看吧。

前言

最近有個軟體專業等級考試,以下簡稱軟考,為了更好的複習備考,我打算抓取www. rkpass.cn網上的軟體考試題。

先講述我爬取軟考試題的故(keng)事(shi)。現在我已經可以自動抓取某一個模組的所有題目了,如下圖:

python爬取技術中的ip自動代理實例

#目前可以將資訊系統監理師的30筆試題記錄全部抓取下來,結果如下圖所示:

python爬取技術中的ip自動代理實例

抓取下來的內容圖片:

python爬取技術中的ip自動代理實例

#雖然可以將部分資訊抓取下來,但是程式碼的品質並不高,以抓取資訊系統監理師為例,因為目標明確,各項參數清晰,為了追求能在短時間內抓取到試卷信息,所以並沒有做異常處理,昨天晚上填了很久的坑。

回到主題,今天寫這篇博客,是因為又遇到新坑了。從文中標題我們可以猜出個大概,一定是請求次數太多,所以ip被網站的反爬蟲機制給封了。

python爬取技術中的ip自動代理實例

活人不能讓尿憋死,革命先輩的事蹟告訴我們,身為社會主義的接班人,我們不能屈服於困難,逢山開路,遇水搭橋,為了解決ip問題,ip代理這個思路就出來了。

在網路爬蟲抓取資訊的過程中,如果抓取頻率高過了網站的設定閥值,將會被禁止存取。通常,網站的反爬蟲機制都是依據IP來標示爬蟲的。

於是在爬蟲的開發者通常需要採取兩種手段來解決這個問題:

##1、放慢抓取速度,減少對於目標網站造成的壓力。但是這樣會減少單位時間類別的抓取量。


2、第二種方法是透過設定代理IP等手段,突破反爬蟲機制繼續高頻率抓取。但是這樣需要多個穩定的代理IP。

話不多書,直接上程式碼:

# IP地址取自国内髙匿代理IP网站:www.xicidaili.com/nn/
# 仅仅爬取首页IP地址就足够一般使用
from bs4 import BeautifulSoup
import requests
import random

#获取当前页面上的ip
def get_ip_list(url, headers):
 web_data = requests.get(url, headers=headers)
 soup = BeautifulSoup(web_data.text)
 ips = soup.find_all('tr')
 ip_list = []
 for i in range(1, len(ips)):
 ip_info = ips[i]
 tds = ip_info.find_all('td')
 ip_list.append(tds[1].text + ':' + tds[2].text)
 return ip_list

#从抓取到的Ip中随机获取一个ip
def get_random_ip(ip_list):
 proxy_list = []
 for ip in ip_list:
 proxy_list.append('http://' + ip)
 proxy_ip = random.choice(proxy_list)
 proxies = {'http': proxy_ip}
 return proxies

#国内高匿代理IP网主地址
url = 'http://www.xicidaili.com/nn/'
#请求头
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'}
#计数器,根据计数器来循环抓取所有页面的ip
num = 0
#创建一个数组,将捕捉到的ip存放到数组
ip_array = []
while num < 1537:
 num += 1
 ip_list = get_ip_list(url+str(num), headers=headers)
 ip_array.append(ip_list)
for ip in ip_array:
 print(ip)
#创建随机数,随机取到一个ip
# proxies = get_random_ip(ip_list)
# print(proxies)

運行結果截圖:

python爬取技術中的ip自動代理實例

這樣,在爬蟲請求的時候,把請求ip設定為自動ip,就能有效的躲過反爬蟲機制中簡單的封鎖固定ip這個手段。

-------------------------------------------- -------------------------------------------------- ---------------------------------------

為了網站的穩定,爬蟲的速度大家還是控制下,畢竟站長也不容易。本文測試只抓了17頁ip。

總結#

以上是python爬取技術中的ip自動代理實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn