PythonのエージェントIPエージェント・プール

  Pythonの爬虫類を使用する場合は、多くの場合、抗登るメカニズム、そのウェブサイトに遭遇します。我々は迷彩ヘッダをクロールすることができますが、サイトにはまだ情報をクロール防ぐために、あなたのIPを禁止するためには、あなたのIPアドレスを取得することができます。

  リクエストメソッドでは、我々はウェブサイト上で、プロキシパラメータによっていくつかの無料のIPプロキシサイトを当社のIPを偽装することができます、あなたはこれらのIP、事後テストによって確立されたIPエージェント・プールをクロールすることができます。

  それは迷彩ヘッドの一般的な方法をお勧めします

  fake_useragent輸入のUserAgentから

  UA =ユーザーエージェント()

  ヘッダー= { 'ユーザエージェント':ua.random}

  その後、ポイントを取得

  クロールIP(IPPool.py)

  インポート要求

  lxmlのインポートetreeから

  fake_useragent輸入のUserAgentから

  #変装

  UA =ユーザーエージェント()

  ヘッダー= { 'ユーザエージェント':ua.random}

  デフ)(get_ip:

  ip_list = []

  #パス

  URL =「https://www.xicidaili.com/nt/」#ipのは、最初のページのみをクロールし、高齢化

  #リクエスト

  応答= requests.get(URL = URL、ヘッダー=ヘッダ)

  #セットのコーディング

  response.encoding = response.apparent_encoding

  応答= response.text

  応答= etree.HTML(応答)

  tr_list = response.xpath( '// TR [クラス@ = "奇妙な"]')

  私tr_list中のため:

  #ipの

  IP = i.xpath( './ TD [2] /テキスト()')[0]

  #ポート番号

  ポート= i.xpath( './ TD [3] /テキスト()')[0]

  #プロトコル

  契約= i.xpath( './ TD [6] /テキスト()')[0]

  合意= agreement.lower()

  #完全パスを組み立て

  IP =契約+ '://' + IP + ':' +ポート

  ip_list.append(IP)

  ip_list戻ります

  __name__ == '__main__' の場合:

  ip_list = get_ip()

  印刷(ip_list)

  テストIP

  (multiprocessing.dummyインポートプールから)試験方法

  インポート要求

  multiprocessing.dummyインポートプールから

  #IPアドレスのリストを取得するために、クロール

  IPPoolインポートget_ipから

  test_list = get_ip()

  #は、有効なIPアドレスを格納するために使用される、グローバルリストを定義します。

  ip_list = []

  #ipのテストサイト

  URL = 'http://icanhazip.com'

  ヘッダー= {

  'ユーザーエージェント': 'のMozilla / 5.0(Windows NTの10.0; Win64の、x64の、RV:70.0)のGecko / 20100101 Firefoxの/ 70.0'

  }

  デフip_test(IP):

  試してみてください。

  もしip.split( ":")[0] == 'のhttp':

  プロキシ= {

  'HTTP':IP

  }

  そうしないと:

  プロキシ= {

  'HTTPS':IP

  }

  応答= requests.get(URL = URL、ヘッダー=ヘッダ、プロキシ=プロキシ、タイムアウト= 3)

  ip_list.append(IP)

  印刷(IP + "利用可能")

  除きます:

  印刷(IP + "利用不可")

  __name__ == '__main__' の場合:

  プール=プール(4)

  pool.map(ip_test、test_list)

  印刷(ip_list)

  印刷( "%sの合計クロールIPのはIPとして入手可能:%sは、IPが使用できない:%s" は%(LEN(test_list)においてlen(ip_list)、LEN(test_list)-len(ip_list)))

  テスト結果:

  試験方法2(スレッドマルチスレッドキュー)

  インポートのスレッド

  インポート要求

  インポートキュー

  fake_useragent輸入のUserAgentから

  #IPアドレスのリストを取得するために、クロール

  IPPoolインポートget_ipから

  test_list = get_ip()

  #は、有効なIPアドレスを格納するために使用される、グローバルリストを定義します。

  ip_pool = []

  #ランダムヘッド迷彩

  UA =ユーザーエージェント()

  ヘッダー= { 'ユーザエージェント':ua.random}

  URL = 'https://www.csdn.net/'

  #URL = 'http://icanhazip.com/'

  デフtest_ip(queue_list):

  真の中に:

  もしqueue_list.empty():

  ブレーク

  そうしないと:

  IP = queue_list.get()

  もしip.split( ":")[0] == 'のhttp':

  プロキシ= {

  'HTTP':IP

  }

  そうしないと:

  プロキシ= {

  'HTTPS':IP

  }

  試してみてください。

  応答= requests.get(URL = URL、ヘッダー=ヘッダ、プロキシ=プロキシ、タイムアウト= 3)

  response.status_code == 200の場合:

  印刷( "%s]は[%sの試験、試験結果が利用可能である[]" %(threading.current_thread()。名、プロキシ))

  ip_pool.append(IP)

  除きます:

  印刷( "%s]は[%sのテストは、テストの結果が利用できない[]" %(threading.current_thread()。名、プロキシ))

  __name__ == '__main__' の場合:

  queue_list = queue.Queue()#は、キューを作成します。

  キューにクロールの#Ipは

  私test_list中のため:

  queue_list.put(I)

  #スレッドを作成します。

  out_thread = [threading.Thread(目標= test_ip、引数=(queue_list)、NAME = "进程%S" %項目)項目の範囲内(5)]

  out_thread内のスレッドのために:

  thread.start()

  out_thread内のスレッドのために:

  thread.join()

  印刷(「テストが完了」)

  印刷(ip_pool)

  印刷( "%sの合計クロールIPのはIPとして入手可能:%sは、IPが使用できない:%s" は%(LEN(test_list)においてlen(ip_pool)、LEN(test_list)-len(ip_pool)))

  結果:

  テストURLはそれほど複雑では必要ありません、www.baidu.comブロガーを持つことができるクラスはテストのWebサイトを推奨しています。http://icanhazip.com/

  ピットをテストするときに遭遇した、プロトコルにすぎない注目は、httpまたはhttps、httpで統一され、その後、各IPはおよそ20-IPのテストが成功した後に変更され、当然のことながら、これは不可能であり、使用することができました5かそこら。鄭州、中絶を行うどのくらいのお金http://www.kdwtrl.com/

  IP https://www.kuaidaili.com/free/intr/もそう何のテストが存在しない、(治療なしIP)を書いたが、少しこのURL IPこのURLをクロール

  IPPool2.py

  インポート要求

  lxmlのインポートetreeから

  fake_useragent輸入のUserAgentから

  #変装

  UA =ユーザーエージェント()

  ヘッダー= { 'ユーザエージェント':ua.random}

  デフ)(get_ip:

  ip_list = []

  #パス

  URL = 'https://www.kuaidaili.com/free/intr/'

  #リクエスト

  応答= requests.get(URL = URL、ヘッダー=ヘッダ)

  #セットのコーディング

  response.encoding = response.apparent_encoding

  応答= response.text

  応答= etree.HTML(応答)

  tr_list = response.xpath( '// * [@ ID = "リスト"] /テーブル/のtbody / TR')

  私tr_list中のため:

  IP = i.xpath( './ TD [1] /テキスト()')[0]

  ip_list.append(IP)

  ip_list戻ります

  __name__ == '__main__' の場合:

  ip_list = get_ip()

  #プリント(ip_list)


おすすめ

転載: blog.51cto.com/14503791/2485400