ホームページ  >  記事  >  バックエンド開発  >  良心の推薦! Python クローラーマスターに必須の 8 つのスキル!

良心の推薦! Python クローラーマスターに必須の 8 つのスキル!

PHPz
PHPz転載
2023-04-13 11:55:051523ブラウズ

良心の推薦! Python クローラーマスターに必須の 8 つのスキル!

クローラーをすぐに学びたい場合、学ぶ価値のある言語は Python でなければなりません。Python には、迅速な Web 開発、クローラー、自動化された運用とメンテナンス、 Webサイト、自動投稿スクリプト、メール送受信スクリプト、簡易認証コード認識スクリプトなど簡単に行えます。

クローラーの開発プロセスには再利用のプロセスも多くありますが、今日は将来の時間と労力を節約し、効率的にタスクを完了できる 8 つの必須スキルをまとめます。

#1. Web ページの基本的なクロール

get メソッド

import urllib2
url = "http://www.baidu.com"
response = 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 がブロックされる状況がよく発生します。この場合、プロキシ 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 は、一部の Web サイトによってユーザーのローカル端末に保存される (通常は暗号化された) データです。ユーザーの ID を識別し、セッション追跡を実行します。Python は、Cookie を処理するための cookielib モジュールを提供します。cookielib モジュールの主な機能は、インターネットにアクセスするために urllib2 モジュールと組み合わせて使用​​できるように、Cookie を保存できるオブジェクトを提供することです。リソース。 WeChat で公開アカウントを検索: Architect Guide、返信: Architect Get Information。


コード スニペット:

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=b6Ejc1XSwPq9o756AxnBAg="
request.add_header("Cookie", cookie)

4. ブラウザに偽装する

Web サイトによっては、クローラーの訪問を嫌がるため、クローラーからのリクエストを拒否します。したがって、urllib2 を使用して Web サイトに直接アクセスすると、HTTP エラー 403: 禁止が頻繁に発生します。


いくつかのヘッダーに特に注意してください。サーバーはこれらのヘッダーをチェックします:


    ユーザー エージェント 一部のサーバーまたはプロキシはこの値をチェックします。ブラウザによって開始されたリクエストであるかどうか

  • # 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 サイトごとにユーザーによって異なるため、あまり説明する必要はありません。


2 つ目は解析ライブラリで、一般的に使用される 2 つは次のとおりです。 lxml と BeautifulSoup


これら 2 つのライブラリについて、私の評価としては、どちらも HTML/XML 処理ライブラリであると言えます。Beautifulsoup は純粋に Python で実装されており、非効率ではありますが、実用的な機能を備えています。 HTML ノードのソース コードは検索結果から取得できます。lxml C 言語コーディングは効率的で、Xpath をサポートしています。


6. 認証コードの処理

一部の簡易認証コードについては、簡易識別が可能です。簡単な検証コード認識を行っただけです。ただし、12306 などの一部の対人間検証コードは、コーディング プラットフォームを通じて手動でコーディングできますが、これには当然料金がかかります。


7. Gzip 圧縮

どのようにトランスコードしても文字化けする Web ページに遭遇したことがありますか?あはは、ということは、多くの Web サービスには圧縮データを送信する機能があり、ネットワーク回線で送信される大量のデータを 60% 以上削減できるということをご存知ないということですね。 XML データは非常に高度に圧縮される可能性があるため、これは XML Web サービスに特に当てはまります。


しかし、一般的に、圧縮データを処理できることをサーバーに伝えない限り、サーバーは圧縮データを送信しません。


したがって、次のようにコードを変更する必要があります:

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 圧縮データを受け入れることができます。
  • 次に、データを解凍します:
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 サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。