マルチスレッドプロキシをクロールして確認します

序文

最も一般的な抗爬虫類では、あなたの要求の頻度を決定するための手段です。あなたはいくつかの時間のためにあなたのアカウントやIPをシールするために、あなたは一人ではないか、短い時間での要求の多くを送信する場合。その目的のクローラを達成するために、この時点で自分自身を隠すためにそれを使用して、プロキシIPを使用する必要があります。ここではマルチスレッドにはクロールと認証プロキシのIP。

分析

無料プロキシIPのソースがある無料のプロキシIPとげ西、以下を参照:
標的部位
ソースコード解析を:次の図では、私が直接のXPathを用いて抽出することを選んだ、とBeautifulSoupは、XPathのない速いだけでなく、プロフィール、以下のコードを比較しました。
ここに画像を挿入説明

コード

クロールコード:

def get_info(Queue,flag):
    while Queue:
        url=Queue.get()
        txt=requests.get(url,headers=headers).text
        html=etree.HTML(txt)
        ip=html.xpath('//tr[@class=""]/td[2]/text()')
        for i in ip:
            Queue3.put([i,flag])
        yz(Queue3)

認証コード:

def yz(Queue):
    while Queue:
        cc=Queue.get()
        ip,flag=cc[0],cc[1]
        try:
            proxies={flag:ip}
            response=requests.get('https://www.baidu.com',proxies=proxies,timeout=2) if flag=='http' else requests.get('http://www.baidu.com',proxies=proxies,timeout=2)
            if response.status_code ==200:
                print(flag,ip,'yes')
            else:
                print(flag,ip,'no')
        except Exception as e:
            print(e)

完全なコード:

import requests
from lxml import etree
import queue
import threading

Queue1=queue.Queue(23)
Queue2=queue.Queue(18)
Queue3=queue.Queue(10000)
for i in range(1,10):
    Queue1.put("https://www.xicidaili.com/wt/%d"%i)  #将ip代理网页放入队列中,便于后续使用多线程
for i in range(1,10):
    Queue2.put("https://www.xicidaili.com/wn/%d"%i)

headers={'User-Agent': 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5',}

def yz(Queue):
    while Queue:
        cc=Queue.get()
        ip,flag=cc[0],cc[1]
        try:
            proxies={flag:ip}
            response=requests.get('https://www.baidu.com',proxies=proxies,timeout=2) if flag=='http' else requests.get('http://www.baidu.com',proxies=proxies,timeout=2)
            if response.status_code ==200:
                print(flag,ip,'yes')
            else:
                print(flag,ip,'no')
        except Exception as e:
            print(e)

def get_info(Queue,flag):
    while Queue:
        url=Queue.get()
        txt=requests.get(url,headers=headers).text
        html=etree.HTML(txt)
        ip=html.xpath('//tr[@class=""]/td[2]/text()')
        for i in ip:
            Queue3.put([i,flag])
        yz(Queue3)


if __name__ == '__main__':
    for i in range(3):
        th=threading.Thread(target=get_info,args=[Queue1,'http'])
        th.start()
    for i in range(3):
        td=threading.Thread(target=get_info,args=[Queue2,'https'])
        td.start()

エフェクトのスクリーンショット

ここに画像を挿入説明
ここに画像を挿入説明

リフレクションの概要

  1. オブジェクトをクロール爬虫類が、これは時間を節約し、効率を向上させることができ、不必要なない情報をクロールするために有用な情報です。
  2. 書き込みは、抗爬虫類の共通戦略を検討する時間を爬虫類、そのため抗爬虫類の変化の時間を戻って保存することができます。
  3. コントロールへの欲求は、サイトを分析します。サイトが取得され、数千プロキシIPの数十は、どうやら無意識のうちに、私が持っているこの時間は、このミスを犯しました。私は、IPの背中が時間を確認見つけたので、サイトの慎重な分析は、いくつかのは2016年であり、私のためとして、あなたは、最新のを選択する必要があります。ないその無用を疑うが、必須ではありません。
  4. 買収機関は、この種のほかにも、IPの安定性をIP買うが、インターネットを購入する良いではないと述べたことができます。無料のIPは時々失敗します。自動的にAPIが使用することですが、これも欠陥があるIP取得に加えて、サイトの利用に対応するAPIが文書化されています。
公開された19元の記事 ウォンの賞賛0 ビュー271

おすすめ

転載: blog.csdn.net/qq_44767889/article/details/104113997