Pythonの爬虫類チュートリアル:アドレス抗まとめサイトへのPythonの爬虫類戦略

本論文では、種々の抗爬虫類の戦略と私が総括する爬虫類の出会いを書いてからに対処するための方法抗爬虫類戦略のウェブサイトを、説明しています。
機能的に言えば、爬虫類は、一般に、3つの部分でデータ収集、処理、ストレージに分割されます。ここでは、唯一のデータ収集を議論します。

3つの抗爬虫類からの一般サイト:ユーザー要求のヘッダー、ユーザーの行動、サイトディレクトリとデータのロード。最初の二つは、比較的容易に満たすために、ほとんどのサイトでは、これらの角度から爬虫類に対抗します。3番目のサイトのAjaxアプリケーションの中には、(静的、動的ロードページを防止するために、AJAX技術を使用してクロール)クロールの難易度を増加させる、使用されます。

1は、ユーザの要求のヘッダから抗クローラは、最も一般的な抗爬虫類戦略です。
カモフラージュヘッダ。ヘッダは、(サイトのリソースの一部は、抗ホットリンクリファラーを検出することである)のUser-Agent上の多くのサイトが検出されているだけでなく、リファラーが検出されるサイトの一部。あなたは抗爬虫類このタイプのメカニズムが発生した場合は、ヘッダ内爬虫類に直接追加することができ、ヘッダの爬虫類のにブラウザのUser-Agentをコピー、またはターゲットドメインのリファラー値を変更し、[コメント:多くの場合、簡単に見落としによるリファラーを決定するパケットキャプチャ要求、ヘッダは、シミュレーションプログラムのアクセスを要求するに]を加えました。抗爬虫類を検出するためのヘッダ、ヘッダが良いバイパスクローラことができる変更または追加します。

ユーザーの行動抗爬虫類に基づいて2、

ユーザーの行動を、検出することにより、サイトの一部は、このような短い時間内に同じページを複数回アクセスするために同じIP、または短時間に同じアカウントと同じ操作を複数回としてあります。[この抗登る、あなたがIPに対処するのに十分なを持っている必要があります]

(1)、サイトのほとんどは、前者の場合あり、この場合には、IPプロキシの使用を解消することができます。あなたは、公共のインターネットプロキシIPをクロール、特別な爬虫類を書き、すべてのテスト後にそれらを保存することができます。あなたは各IP IP要求は数回交換することができ、多数のエージェントを持っていたら、それは、非常に簡単な要求やurllibはで行うことですので、することができます簡単に最初の抗クローラバイパス。

書き込みには、エージェントの爬虫類:

手順:
1辞書{:「エージェントのIPポート番号「 "タイプ"}である
 proxy_support = urllib.request.ProxyHandler({})
2オープナー作成するためにカスタマイズされた
  オープナー= urllib.request.build_opener(proxy_support)を
図3Aインストールオープナー
  urllib.request.install_opener(オープナー)
。(b)。オープナーを呼び出します
  (URL)opener.open

ランダムな要求をたっぷりと演技の標的部位抗爬虫類を扱います

#! /usr/bin/env python3.4
#-*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
 
import urllib.request
import random
import re
 
url='http://www.whatismyip.com.tw'
iplist=['121.193.143.249:80','112.126.65.193:80','122.96.59.104:82','115.29.98.139:9999','117.131.216.214:80','116.226.243.166:8118','101.81.22.21:8118','122.96.59.107:843']
 
proxy_support = urllib.request.ProxyHandler({'http':random.choice(iplist)})
opener=urllib.request.build_opener(proxy_support)
opener.addheaders=[('User-Agent','Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36')]
urllib.request.install_opener(opener)
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
 
pattern = re.compile('<h1>(.*?)</h1>.*?<h2>(.*?)</h2>')
iterms=re.findall(pattern,html)
for item in iterms:
  print(item[0]+":"+item[1])

(2)第二のケースでは、間隔は、秒、各要求次の要求の後にランダムであってもよいです。いくつかの論理的な脆弱性のサイトでは、あなたは、ログアウトし、数回のリクエストで再度ログインし、同じ要求を複数回行うことができない短い時間で同じアカウントバイパスへの要求を制限し続けることができます。[コメント:アカウントの場合抗登るの制限を行う、対処することは一般に困難で、多くの場合、ランダムな要求複数のアカウントがある場合は、数秒が良く、スイッチング、閉鎖することができます]

3、抗爬虫類の動的なページ

上記の状況のほとんどは、Ajaxリクエストデータを取得またはJavaによって生成されてだけでなく、サイトの一部として、我々はクロールする必要が、静的なページに記載されています。

ソリューション:セレン+ PhantomJS

セレン:自動ウェブテストソリューションは、完全に実質的にすべてに完全にシミュレートユーザーアクションの、実世界のブラウザの条件をシミュレート
PhantomJS:グラフィカルなインターフェイスをブラウザなし

淘宝網の姉妹は、個人情報のアドレスを取得します:

#! /usr/bin/env python
# -*- coding:utf-8 -*-
#__author__ == "tyomcat"
 
from selenium import webdriver
import time
import re
 
drive = webdriver.PhantomJS(executable_path='phantomjs-2.1.1-linux-x86_64/bin/phantomjs')
drive.get('https://mm.taobao.com/self/model_info.htm?user_id=189942305&is_coment=false')
 
time.sleep(5)
 
pattern = re.compile(r'<div.*?mm-p-domain-info">.*?class="mm-p-info-cell clearfix">.*?<li>.*?<label>(.*?)</label><span>(.*?)</span>',re.S)
html=drive.page_source.encode('utf-8','ignore')
items=re.findall(pattern,html)
for item in items:
  print item[0],'http:'+item[1]
drive.close()

最後に、私たちは、資源の収集を学ぶ非常に広いのpythonをお勧めします入力する]をクリックし、ここでの経験、研究ノートを学ぶ前に、私のコレクションです、そこにビジネス経験の機会があり、そして皆のため慎重に戦闘へのpythonゼロベースのプロジェクトを整理しますデータ

发布了6 篇原创文章 · 获赞 1 · 访问量 1650

おすすめ

転載: blog.csdn.net/haoxun09/article/details/104620878