1. 程式人生 > >【轉載】【python3.x爬蟲】設定IP代理

【轉載】【python3.x爬蟲】設定IP代理

-

爬取的網站採取了反爬取技術,高強度、高效率地爬取網頁資訊常常會給網站伺服器帶來巨大壓力,所以同一個IP反覆爬取同一個網頁,就很可能被封。

1. 所需庫:

  • 安裝requests庫
  • 安裝bs4庫
  • 安裝lxml庫

2. 用法示例:

  1. 函式get_ip_list(url, headers)傳入url和headers,最後返回一個IP列表,列表的元素類似42.84.226.65:8888格式,這個列表包括國內髙匿代理IP網站首頁所有IP地址和埠。
  2. 函式get_random_ip(ip_list)傳入第一個函式得到的列表,返回一個隨機的proxies,這個proxies可以傳入到requests的get方法中,這樣就可以做到每次執行都使用不同的IP訪問被爬取的網站,有效地避免了真實IP被封的風險。proxies的格式是一個字典:{‘http’: ‘http://42.84.226.65:8888‘}。
# IP地址取自國內髙匿代理IP網站:http://www.xicidaili.com/nn/
# 僅僅爬取首頁IP地址就足夠一般使用

from bs4 import BeautifulSoup
import requests
import random

def get_ip_list(url, headers):
    web_data = requests.get(url, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    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

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

if __name__ == '__main__':
    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_list = get_ip_list(url, headers=headers)
    proxies = get_random_ip(ip_list)
    print(proxies)

3. 代理IP的使用

執行上面的程式碼會得到一個隨機的proxies,把它直接傳入requests的get方法中即可。

web_data = requests.get(url, headers=headers, proxies=proxies)

-

原文:https://blog.csdn.net/Lammonpeter/article/details/52917264