クローラーをすぐに学びたい場合、学ぶ価値のある言語は Python でなければなりません。Python には、迅速な Web 開発、クローラー、自動化された運用とメンテナンス、 Webサイト、自動投稿スクリプト、メール送受信スクリプト、簡易認証コード認識スクリプトなど簡単に行えます。
クローラーの開発プロセスには再利用のプロセスも多くありますが、今日は将来の時間と労力を節約し、効率的にタスクを完了できる 8 つの必須スキルをまとめます。
#1. Web ページの基本的なクロール
get メソッド
1 2 3 4 | import urllib2
url = "http://www.baidu.com"
response = urllib2.urlopen(url)
print response.read()
|
ログイン後にコピー
post メソッド
1 2 3 4 5 6 7 8 | import urllib
import urllib2
url = "http://abcde.com"
form = { 'name' : 'abc' , 'password' : '1234' }
form_data = urllib.urlencode(form)
request = urllib2.Request(url,form_data)
response = urllib2.urlopen(request)
print response.read()
|
ログイン後にコピー
2. プロキシ IP の使用
クローラーの開発プロセスでは、IP がブロックされる状況がよく発生します。この場合、プロキシ IP を使用する必要があります。urllib2 パッケージには ProxyHandler クラスがあり、このクラスを通じてプロキシを設定できます。次のコード スニペットに示すように、Web ページにアクセスします:
1 2 3 4 5 6 | import urllib2
proxy = urllib2.ProxyHandler({ 'http' : '127.0.0.1:8087' })
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen( 'http://www.baidu.com' )
print response.read()
|
ログイン後にコピー
3. Cookie の処理
Cookie は、一部の Web サイトによってユーザーのローカル端末に保存される (通常は暗号化された) データです。ユーザーの ID を識別し、セッション追跡を実行します。Python は、Cookie を処理するための cookielib モジュールを提供します。cookielib モジュールの主な機能は、インターネットにアクセスするために urllib2 モジュールと組み合わせて使用できるように、Cookie を保存できるオブジェクトを提供することです。リソース。 WeChat で公開アカウントを検索: Architect Guide、返信: Architect Get Information。
コード スニペット:
1 2 3 4 5 | import urllib2, cookielib
cookie_support = urllib2.HTTPCookieProcessor(cookielib.CookieJar())
opener = urllib2.build_opener(cookie_support)
urllib2.install_opener(opener)
content = urllib2.urlopen( 'http://XXXX' ).read()
|
ログイン後にコピー
キーは CookieJar() で、HTTP Cookie 値の管理、HTTP リクエストによって生成された Cookie の保存、発信 HTTP リクエストへの Cookie オブジェクトの追加に使用されます。 . . Cookie 全体はメモリに保存され、CookieJar インスタンスのガベージ コレクション後に Cookie は失われます。すべてのプロセスを個別に操作する必要はありません。
Cookie を手動で追加する:
1 2 | cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg="
request.add_header( "Cookie" , cookie)
|
ログイン後にコピー
4. ブラウザに偽装する
Web サイトによっては、クローラーの訪問を嫌がるため、クローラーからのリクエストを拒否します。したがって、urllib2 を使用して Web サイトに直接アクセスすると、HTTP エラー 403: 禁止が頻繁に発生します。
いくつかのヘッダーに特に注意してください。サーバーはこれらのヘッダーをチェックします:
ユーザー エージェント 一部のサーバーまたはプロキシはこの値をチェックします。ブラウザによって開始されたリクエストであるかどうか
# Content-Type REST インターフェイスを使用する場合、サーバーはこの値をチェックして、HTTP 本文のコンテンツをどのように解析するかを決定します-
これは、http パッケージのヘッダーを変更することで実現できます。コード スニペットは次のとおりです:
1 2 3 4 5 6 7 8 9 | import urllib2
headers = {
'User-Agent' : 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'
}
request = urllib2.Request(
url = 'http://my.oschina.net/jhao104/blog?catalog=3463517' ,
headers = headers
)
print urllib2.urlopen(request).read()
|
ログイン後にコピー
5. ページ解析
ページ用の最も強力なツール解析はもちろん正規表現です。表現、これは Web サイトごとにユーザーによって異なるため、あまり説明する必要はありません。
2 つ目は解析ライブラリで、一般的に使用される 2 つは次のとおりです。 lxml と BeautifulSoup
これら 2 つのライブラリについて、私の評価としては、どちらも HTML/XML 処理ライブラリであると言えます。Beautifulsoup は純粋に Python で実装されており、非効率ではありますが、実用的な機能を備えています。 HTML ノードのソース コードは検索結果から取得できます。lxml C 言語コーディングは効率的で、Xpath をサポートしています。
6. 認証コードの処理
一部の簡易認証コードについては、簡易識別が可能です。簡単な検証コード認識を行っただけです。ただし、12306 などの一部の対人間検証コードは、コーディング プラットフォームを通じて手動でコーディングできますが、これには当然料金がかかります。
7. Gzip 圧縮
どのようにトランスコードしても文字化けする Web ページに遭遇したことがありますか?あはは、ということは、多くの Web サービスには圧縮データを送信する機能があり、ネットワーク回線で送信される大量のデータを 60% 以上削減できるということをご存知ないということですね。 XML データは非常に高度に圧縮される可能性があるため、これは XML Web サービスに特に当てはまります。
しかし、一般的に、圧縮データを処理できることをサーバーに伝えない限り、サーバーは圧縮データを送信しません。
したがって、次のようにコードを変更する必要があります:
1 2 3 4 5 | import urllib2, httplib
request = urllib2.Request( 'http://xxxx.com' )
request.add_header( 'Accept-encoding' , 'gzip' )
opener = urllib2.build_opener()
f = opener. open (request)
|
ログイン後にコピー
これが重要です: Request オブジェクトを作成し、Accept-encoding ヘッダーを追加して、サーバーに次のことを伝えます。 gzip 圧縮データを受け入れることができます。
1 2 3 4 5 6 | import StringIO
import gzip
compresseddata = f.read()
compressedstream = StringIO.StringIO(compresseddata)
gzipper = gzip.GzipFile(fileobj = compressedstream)
print gzipper.read()
|
ログイン後にコピー
8. マルチスレッドの同時クロール
単一スレッドが遅すぎる場合は、マルチスレッドが必要です。この単純なスレッド プール テンプレート プログラムは 1 ~ 10 を出力するだけですが、並列処理されていることがわかります。
Python のマルチスレッドは役に立ちませんが、ネットワークを頻繁に使用するクローラの効率をある程度向上させることができます。
うわー
以上が良心の推薦! Python クローラーマスターに必須の 8 つのスキル!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。