pythonエージェントIPをキャプチャし、マルチスレッド検証


一、代理IPをつかむ
無料の代理IPを提供するウェブサイトはまだ多くて、私は“西刺代理”の上でひとしきり猛然とつかんだ後に自分のIPはそれに遮られました.「IPバス」に乗り換えて、おとなしく捕まえるスピードを緩めるしかない.スナップコードを貼る
import urllib.request
import urllib
import re
import time
import random
'''
       ?Python     :821460695      ,          ,      !
'''
#    IP
ip_totle=[]  #         
for page in range(2,6):
    url='http://ip84.com/dlgn/'+str(page)
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"}
    request=urllib.request.Request(url=url,headers=headers)
    response=urllib.request.urlopen(request)
    content=response.read().decode('utf-8')
    print('get page',page)
    pattern=re.compile('(\d.*?)')  #               
    ip_page=re.findall(pattern,str(content))
    ip_totle.extend(ip_page)
    time.sleep(random.choice(range(1,3)))
#      
print('  IP       ','\t','  ','\t','  ','\t','    ')
for i in range(0,len(ip_totle),4):
    print(ip_totle[i],'    ','\t',ip_totle[i+1],'\t',ip_totle[i+2],'\t',ip_totle[i+3])

以上のコードをコピーすることでIPバス上の大陸高匿代理IPをキャプチャすることができ、他の地域やタイプのURLを自分で変更することができ、サイトの内容がリアルタイムで更新された原因かもしれないが、1ページ目からキャプチャするのはあまり安定していないので、2ページ目からキャプチャし、印刷部分の結果は以下の通りである.
[外部チェーンピクチャの転送に失敗しました(img-AQRrf 0 dZ-156620189224)](https://upload-images.jianshu.io/upload_images/13406307-f2435ba70986e2df.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
二、代理IPの有効性を検証する
ネットワークがこのエージェントに接続されていないか、ターゲットサイトに接続されていない可能性があるなどの理由で、キャプチャしたエージェントが無効である可能性があります.キャプチャしたエージェントIPの有効性を検証する必要があります.urllib.requestパッケージのProxyHandlerクラスは、次のコードでプロキシアクセスページを設定できます.
import urllib.request
url = "http://quote.stockstar.com/stock"  #         
proxy_ip={'http': '27.17.32.142:80'}  #      IP
proxy_support = urllib.request.ProxyHandler(proxy_ip)
opener = urllib.request.build_opener(proxy_support)
opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]
urllib.request.install_opener(opener)
print(urllib.request.urlopen(url).read())

三、マルチスレッド高速検証マルチスレッド検証の主なプログラムは以下の通りである.
#         
threads=[]
for i in range(len(proxys)):
    thread=threading.Thread(target=test,args=[i])
    threads.append(thread)
    thread.start()
#     ,         
for thread in threads:
    thread.join()

最初はメタグループパラメータargs=(i)に、結果として「test()argument after*must be an iterable,not int」というエラーを報告し、誤って小かっこを中かっこに変更した後に役に立ちました.プログラム部分の実行結果は以下の通りです.
[外部チェーンピクチャの転送に失敗しました(img-wgO 3 xpRD-156620189225)](https://upload-images.jianshu.io/upload_images/13406307-438be3e7ef079162.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
親測マルチスレッド検証は単一スレッド検証よりも何倍も速いので、後でページを登る量が大きい場合は、まずこのプログラムで有効なエージェントIPをつかむことができ、IPがブロックされている問題を解決することができます.python 3エージェントIPをキャプチャし、マルチスレッドで迅速に検証する完全なコードは以下の通りです.
import urllib.request
import urllib
import re
import time
import random
import socket
import threading
'''
       ?Python     :821460695      ,          ,      !
'''
#    IP
ip_totle=[]
for page in range(2,6):
    url='http://ip84.com/dlgn/'+str(page)
    #url='http://www.xicidaili.com/nn/'+str(page) #    
    headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64)"}
    request=urllib.request.Request(url=url,headers=headers)
    response=urllib.request.urlopen(request)
    content=response.read().decode('utf-8')
    print('get page',page)
    pattern=re.compile('(\d.*?)')  #               
    ip_page=re.findall(pattern,str(content))
    ip_totle.extend(ip_page)
    time.sleep(random.choice(range(1,3)))
#      
print('  IP       ','\t','  ','\t','  ','\t','    ')
for i in range(0,len(ip_totle),4):
    print(ip_totle[i],'    ','\t',ip_totle[i+1],'\t',ip_totle[i+2],'\t',ip_totle[i+3])
#    IP  
proxys = []
for i in range(0,len(ip_totle),4):
    proxy_host = ip_totle[i]+':'+ip_totle[i+1]
    proxy_temp = {"http":proxy_host}
    proxys.append(proxy_temp)

proxy_ip=open('proxy_ip.txt','w')  #        IP   
lock=threading.Lock()  #     
#    IP      
def test(i):
    socket.setdefaulttimeout(5)  #        
    url = "http://quote.stockstar.com/stock"  #       
    try:
        proxy_support = urllib.request.ProxyHandler(proxys[i])
        opener = urllib.request.build_opener(proxy_support)
        opener.addheaders=[("User-Agent","Mozilla/5.0 (Windows NT 10.0; WOW64)")]
        urllib.request.install_opener(opener)
        res = urllib.request.urlopen(url).read()
        lock.acquire()     #   
        print(proxys[i],'is OK')        
        proxy_ip.write('%s
' %str(proxys[i])) # IP lock.release() # except Exception as e: lock.acquire() print(proxys[i],e) lock.release() # '''for i in range(len(proxys)): test(i)''' # threads=[] for i in range(len(proxys)): thread=threading.Thread(target=test,args=[i]) threads.append(thread) thread.start() # , for thread in threads: thread.join() proxy_ip.close() #