序文
最も一般的な抗爬虫類では、あなたの要求の頻度を決定するための手段です。あなたはいくつかの時間のためにあなたのアカウントや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()
エフェクトのスクリーンショット
リフレクションの概要
- オブジェクトをクロール爬虫類が、これは時間を節約し、効率を向上させることができ、不必要なない情報をクロールするために有用な情報です。
- 書き込みは、抗爬虫類の共通戦略を検討する時間を爬虫類、そのため抗爬虫類の変化の時間を戻って保存することができます。
- コントロールへの欲求は、サイトを分析します。サイトが取得され、数千プロキシIPの数十は、どうやら無意識のうちに、私が持っているこの時間は、このミスを犯しました。私は、IPの背中が時間を確認見つけたので、サイトの慎重な分析は、いくつかのは2016年であり、私のためとして、あなたは、最新のを選択する必要があります。ないその無用を疑うが、必須ではありません。
- 買収機関は、この種のほかにも、IPの安定性をIP買うが、インターネットを購入する良いではないと述べたことができます。無料のIPは時々失敗します。自動的にAPIが使用することですが、これも欠陥があるIP取得に加えて、サイトの利用に対応するAPIが文書化されています。