Python クローラー: 一般的に使用されるいくつかのクローラー手法のまとめ
クローラーには、開発プロセス中に多くの再利用プロセスもあります。将来のことを考慮して、ここでまとめてみましょう。
1. Web ページの基本的なクロール
get メソッド
import urllib2 url "http://www.baidu.com" respons = urllib2.urlopen(url) print response.read()
post メソッド
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 を使用する必要があります 次のコード スニペットに示すように、urllib2 パッケージには ProxyHandler クラスがあり、これを使用して Web ページにアクセスするためのプロキシを設定できます。 :
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 は、ユーザーの ID を識別し、セッション追跡を実行するために、一部の Web サイトによってユーザーのローカル端末に保存されるデータです。 cookielib モジュールの主な機能は、インターネット リソースにアクセスするための urllib2 モジュールでの使用を容易にする保存可能な Cookie オブジェクトを提供することです。
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を手動で追加します
コードをコピーしますコードは次のとおりです:
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756 Ax nBAg="
request.add_header("Cookie", Cookie)ブラウザを装った
4
一部の Web サイトは、クローラーの訪問にうんざりしているため、クローラーからのリクエストを拒否します。したがって、urllib2 を使用して Web サイトに直接アクセスすると、HTTP エラー 403: 禁止が発生することがよくあります。サーバーはこれらのヘッダーを確認するために使用されます。ブラウザによって開始されたリクエストであるかどうか
2).Content-Type REST インターフェイスを使用する場合、サーバーはこの値をチェックして、HTTP 本文のコンテンツをどのように解析するかを決定します。
これは、http パッケージのヘッダーを変更することで実現できます。コード スニペットは次のとおりです。
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 サイトごとに異なるので、あまり説明する必要はありません。より良い URL を 2 つ紹介します:
正規表現オンライン テスト: http://tool.oschina.net/regex/
一部の単純な検証コードについては、簡単な識別を実行できます。簡単な検証コード認識を行っただけです。ただし、12306 などの一部の対人間検証コードは、コーディング プラットフォームを通じて手動でコーディングできます。これには当然料金がかかります。
7. Gzip 圧縮どのようにトランスコードしても文字化けする Web ページに遭遇したことがありますか?あはは、ということは、多くの Web サービスには圧縮データを送信する機能があり、ネットワーク回線で送信される大量のデータを 60% 以上削減できるということをご存知ないということですね。 XML データは非常に高度に圧縮される可能性があるため、これは XML Web サービスに特に当てはまります。
しかし、一般的に、圧縮データを処理できることをサーバーに伝えない限り、サーバーは圧縮データを送信しません。
そのため、次のようにコードを変更する必要があります:
import urllib2, httplib request = urllib2.Request('http://xxxx.com') request.add_header('Accept-encoding', 'gzip') 1 opener = urllib2.build_opener() f = opener.open(request)
これが重要です: Request オブジェクトを作成し、Accept-encoding ヘッダーを追加して、gzip 圧縮データを受け入れることができることをサーバーに伝えますその後、解凍しますデータ:
8. マルチスレッドの同時クロール
シングルスレッドが遅すぎる場合、このプログラムは単純に 1 ~ 10 を出力します。しかし、それは並行していることがわかります。
Python のマルチスレッドは役に立ちませんが、ネットワークを頻繁に使用するクローラーの効率をある程度向上させることができます。
import StringIO import gzip compresseddata = f.read() compressedstream = StringIO.StringIO(compresseddata) gzipper = gzip.GzipFile(fileobj=compressedstream) print gzipper.read()
以上がこの記事の全内容であり、皆様の学習に役立つことを願っております。また、皆様にも PHP 中国語 Web サイトをサポートしていただければ幸いです。
その他の Python クローラー スキルの概要関連記事については、PHP 中国語 Web サイトに注目してください。