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)