國內高匿代理爬取,並驗證代理ip有效性

運行環境:python 3.7.3

所需庫:

  1. requests
  2. lxml
  3. time
  4. multiprocessing
  5. sys

說明:西刺代理對一天內爬取的次數有限制,超出後會被封ip

import requests
from lxml import etree
import time
from multiprocessing import Pool
import multiprocessing
import sys

def get_single(url):         #爬出單頁上的所有代理ip
    r=requests.get(url,headers=head)
    if r.status_code==503:
        print('由於爬取次數過多,你的Ip已經被封')
        sys.exit(0)
    content=etree.HTML(r.text)
    ip=content.xpath('//table[@id="ip_list"]/tr/td[2]/text()')
    duankou=content.xpath('//table[@id="ip_list"]/tr/td[3]/text()')
    for i in range(0,len(ip)):
        ip_list.append(ip[i]+":"+duankou[i])

def input_urls():     #防止ip被封每三秒訪問一頁
    for i in range(1,21):
       get_single(url+str(i))
       print('爬取第'+str(i)+'頁\r',end="")
       time.sleep(3)

def verify_ips(ip,ip_valid_list):    #驗證代理ip
    poxie="http://"+ip
    proxies={
            'http':poxie,
            'https':poxie
        }
    try:
        requests.get('https://www.baidu.com',headers=head,proxies=proxies,timeout=3)
        ip_valid_list.append(ip)
    except Exception as e :
        print(e)
ip_list=[]
url="https://www.xicidaili.com/nn/"
head={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
if __name__ == "__main__":
    print(
        """
        程序結束後會在當前文件夾生成一個ip_proxies_valid.txt文件,
        防止ip被封,控制爬取頻率
        """
    )
    mlist=multiprocessing.Manager()
    ip_valid_list=mlist.list()
    input_urls()
    print("總共爬取到"+str(len(ip_list))+"個ip,接下來準備驗證ip有效性")
    print("驗證倒計時3s")
    time.sleep(1)
    print("驗證倒計時2s")
    time.sleep(1)
    print("驗證倒計時1s")
    time.sleep(1)
    print("開始驗證!")
    p=Pool(15)
    for ip in ip_list:
        p.apply_async(verify_ips,(ip,ip_valid_list)) #多進程驗證
    p.close()
    p.join()
    f=open('ip_proxies_valid.txt','a')
    for ip in ip_valid_list:   #寫入txt文件
        f.write(ip)
        if ip!=ip_valid_list[-1]:
            f.write('\n')
    f.close()
    print("完成")

爬取到的有效代理ip如下圖所示
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章