高速のIPおよびテストフリーエージェントをクロール

IP抗登るには、主要な空きが多いサイトのブロックあまりにも頻繁にIPにアクセスするには、一定の期間を意味するので、一定の時間間隔を設定するには、しかし、正直に言うと必要性をクロールするとき、フリーエージェントは、非常に多くの場合、基本的な使用していません、千ダウンのみダースを使用することができるが、数分後フラッターストリートを推定することがあります。ありますが、多数のエージェントはそのIPを支払ったが、必ずしも良好ではない、テストされ、高品質の内側に非常に小さいです。より良い存在の経験や民間の機関では、当然のことながら、他のがあります。あなたの真実を持っています。

インポート要求が
 インポート時間
 インポートランダムに
 から fake_useragent 輸入のUserAgent から requests.exceptions インポートRequestExceptionを
 から lxmlのインポートetree
 インポートCSV形式の

クラスIPSpider(オブジェクト):
     デフ __init__ (自己):
        self.url = " https://www.kuaidaili.com/free / INHA / ' 
        self.url_test = ' http://www.baidu.com/ "   直接拿百度来测试IP能不能用

    デフget_headers(自己):
         "" " 
            ランダムに生成されたリクエストヘッダ
        :リターン:
        " "" 
        UA = ユーザーエージェント()
        ヘッダー = {
             ' ユーザーエージェント' :ua.random     
        } 
        戻りヘッダ

    DEF get_page(セルフ、URL):
         "" " 
            ゲットページのソース
        :PARAM URL: リターン:
        "" " 
        しばらく真:
             試してみる
                ヘッダ = self.get_headers()
                レスポンスRequests.getは=(URL、ヘッダ=ヘッダ、=を確認してください偽)
                 IF response.status_codeの== 200 返すresponse.text
                 印刷(response.status_code)
                 昇給とValueError(" Webページのエラーを開く" を除くERR AS requestexception:
                 印刷(ERR )

    DEF PARSE_IP(セルフ、テキスト):
         "" " 
            IPとポート番号の抽出ページ
        :PARAMテキスト:
        :リターン:
        " "" 
        HTML = etree.HTML(テキスト)
        IP = html.xpath(" // TR / TD [1] /テキスト()" 印刷(IP)
        ポート = html.xpath(" // TR / TD [2] /テキスト()" 印刷(ポート)
         リターンZIP(IP、ポート)

    デフtest_ip(自己、IP、ポート):
         "" " 
            测试IP是否可用
        :PARAM IP:
        :PARAMポート:
        :リターン
        """ 
        してみてください#1 url_ip = 'のhttp://' + IP + ':' +ポート
            #のプロキシ= { 
                 'のhttp':url_ip、 
                 'HTTPS':url_ip 
            }
            プロキシ= {
                 ' HTTP '' のhttp:// {}:{} ' .format(IP、ポート)、
                 ' HTTPS '' のhttps:// {}:{} ' .format(IP、ポート)
            } 
            ヘッダー = self.get_headers()
            応答 = requests.get(URL = self.url_test、ヘッダー=ヘッダ、プロキシの=プロキシ、タイムアウト= 8 場合 response.status_codeの== 200 印刷" %sの可用"%のIP)
                返すIP、ポート
             戻りなしを
         除いてRequestException:
             印刷' %sの失效'IP)

    デフsave_ip(自己、結果):
         "" " 
            可用的IP保存
        :PARAM結果を:
        :リターン
        """ 
        オープン(と" kuaidailiip。 CSV " " A " Fなど):
            ライター = csv.writer(F)
            writer.writerows(結果)

    デフ自己(実行
        ):"""
            主な機能
        :リターン
        ""」
        のための I における範囲(1 1001 ):
            URL = self.url + STR(I)+ ' / ' 
            テキスト = self.get_page(URL)
            IP = self.parse_ip(テキスト)
            結果 = []
             以下のための J でのIP:
                ok_ip = self.test_ip(J [0]、J [1 ])
                 場合 ok_ipは== なし:
                     続けない
                
                    result.append(ok_ip)
            self.save_ip(結果)
            time.sleep( random.randint(5,7))
もし__name__ == ' __main__ '
  クモ
= IPSpider()
  spider.run()

 

おすすめ

転載: www.cnblogs.com/lattesea/p/11576055.html