私たちが言う前に、ウェブサイト、一般的に使用される方法は、アクセス頻度を制限し、抗クローラのIPを検出することです。だから我々は、プロキシIPアプローチを設定することでこの制限を回避する必要があります。以下のように、自由なプロキシIPを提供する多くのウェブサイトがありhttps://www.xicidaili.com/nt/は、我々はウェブサイトからプロキシIPの多くを得ることができます。しかし、誰もがこれらのIPを使用するか、または言って、使用可能ないくつかのことができます。
私たちはあなたにも、正規表現のマッチングを使用することができ、分析ページをbeautifulsoup使用して、プロキシIPリストを抽出するために処理することができます。正規表現のように高速になります。ip_urlはhttps://www.xicidaili.com/nt/ random_hearder機能が要求ヘッダーへのランダムアクセスです。
DEF download_page(URL): ヘッダー = random_header() データ = requests.get(URL、ヘッダー= ヘッダ) 戻りデータ デフget_proxies(PAGE_NUM、ip_url): available_ip = [] のためのページで範囲(1 、PAGE_NUM): 印刷(" 抓取第%D页代理IP "%ページ) のURL = ip_url + STR(ページ) R = download_page(URL) r.encoding = ' UTF-8 ' パターンre.compile =(" <TDクラス= "国"> = "CN"。*?Altキー/>.*?</ TD>。*?<TD>(。*?)</ TD>。*?< (。*?)TD> </ TD> 're.S) ip_list = re.findall(パターン、r.text) のための IP でip_list: IF test_ip(IP): 印刷(' %のS:テストによる%S 、利用可能なエージェントのリストに追加'%(IP [0]、IP [1 ])) available_ip.append(IP) time.sleep( 10 )印刷(' グリップエンド' ) 戻り available_ip
また、IPを使用することができますを決定するには、ip IP検出を取得する必要があります。どのようにそれを検出するには?私たちは、アクセスIP IPプロキシアクセスしてWebサイトを表示し、要求の結果を確認することができるかもしれません。
デフ test_ip(IP、test_url = ' http://ip.tool.chinaz.com/ ' ): プロキシ = { ' HTTP ':IP [0] + ' :' + IP [1 ]} try_ip = IP [0] 試す: R = requests.get(test_url、ヘッダー= random_header()、プロキシ=のプロキシ) 場合 r.status_codeの== 200 : r.encoding = ' GBKを' 結果 = re.search(' \ dの{1,3} \ \ dの{1,3} \ \ D {1,3} \ \ D {1,3} ' 、r.text) 結果 =result.group() 印刷(結果) IF結果[:9] == try_ip [:9 ]:印刷('%のS:%S 試験による' %(IP [0]、IP)[1] ) を返す真の 他: 印刷(' :%S%Sを運ぶエージェントはローカルIP使用して、失敗した' [1%(IP [0]、IP ])) を返すFalseの 他: 印刷(' :%はS%Sの要求コード200ではありません'%( IP [0]、IP [1 ])) を返す偽 以外インクルードを:Eとして例外 プリント(E) プリント(' %sの:%S错误'%(IP [0]、IP [1 ])) を返す偽
いくつかのチュートリアルでは、ちょうどそれが適切ではない、HTTPステータスコード200が成功と見なされている取得します。プロキシIPアクセスが成功していないので、あなた自身のIPデフォルトを使用します。私自身のIPアクセスで、私たちは確かに成功したことができます。
使用前にIPを取得し、それが利用できないときあなたが知っていないので、最後に、我々はまた、検出する必要があります。だから、通常の統計情報を使用していない時間を使用しないように複数のエージェントが、腹腔買いだめ。
この記事のコードは、への参照を作ったhttps://blog.csdn.net/XRRRICK/article/details/78650764、私はいくつかが少し変化しました。