ホームページ  >  記事  >  バックエンド開発  >  Python クローラー スキルの概要

Python クローラー スキルの概要

高洛峰
高洛峰オリジナル
2017-02-24 15:22:331245ブラウズ

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/

2 つ目は、一般的に使用される 2 つのライブラリは、lxml と BeautifulSoup です。これら 2 つの使用については、次の 2 つの優れた Web サイトを紹介します。 :// cuiqingcai.com/1319.html

これら 2 つのライブラリに対する私の評価は、どちらも HTML/XML 処理ライブラリであり、純粋に Python で実装されており、非効率ですが、その機能は実用的です。結果検索を通じて特定の機能を取得するために使用されます。lxmlC 言語エンコード、効率的、検証コード処理

一部の単純な検証コードについては、簡単な識別を実行できます。簡単な検証コード認識を行っただけです。ただし、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 サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。