私は少し前に Python を使って検索エンジンの結果をクロールする方法を研究していましたが、その実装過程で遭遇したすべての問題を記録しました。将来同じ問題に遭遇する人たちに役立つことを願っています。もう寄り道はしません。
1. 検索エンジンの選択
適切な検索エンジンを選択すると、より正確な検索結果が得られます。私が使用した検索エンジンは、Google、Bing、Baidu、Yahoo! の 4 つです。 プログラマーとして、Google が私の第一選択です。しかし、お気に入りの Google から返ってきたのは大量の JS コードだけで、望んでいた検索結果はまったくありませんでした。そこで、Bing キャンプに切り替えました。しばらく使ってみたところ、Bing から返される検索結果は私の問題にとって理想的ではないことがわかりました。絶望しそうになったとき、Google が私を救ってくれました。ブラウザでの js の使用を禁止しているユーザーに対処するために、Google は次の検索 URL を参照してください:
https://www.google.com.hk/search ?hl=ja&q=hello
hlは検索する言語を指定し、qは検索したいキーワードを指定します。 Google のおかげで、検索結果ページにはクロールしたいコンテンツが含まれています。
PS: Python を使用して Google 検索結果をクロールするインターネット上の多くのメソッドは、 https://ajax.googleapis.com/ajax/services/search/web... です。この方法は Google によって推奨されていないことに注意してください。https://developers.google.com/web-search/docs/ を参照してください。 Google は現在、カスタム検索 API を提供していますが、この API は 1 日あたり 100 リクエストに制限されており、それ以上必要な場合は料金を支払う必要があります。
2. Python は Web ページをクロールして分析します
Python を使用して Web ページをクロールすると非常に便利です。コードを参照してください:
def search(self, queryStr): queryStr = urllib2.quote(queryStr) url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr request = urllib2.Request(url) response = urllib2.urlopen(request) html = response.read() results = self.extractSearchResults(html)
6 行目の html は検索結果ページのソース コードです。私たちは這いました。 Python を使用したことのある学生は、Python が urllib と urllib2 という 2 つのモジュールを提供していることに気づくでしょう。どちらも URL リクエストに関連していますが、urllib は URL を受け取ることしかできず、urllib2 は Request クラスのインスタンスを受け入れることができます。 URL リクエストのヘッダーを設定します。これは、ユーザー エージェントなどを偽装できることを意味します (以下で使用します)。
Python を使用して Web ページをクロールして保存できるようになったので、ソース コード ページから必要な検索結果を抽出できます。 Python には htmlparser モジュールが用意されていますが、使用するのは比較的面倒です。ここでは、非常に便利な Web ページ分析パッケージである BeautifulSoup を推奨します。BeautifulSoup の使い方については、裁判官の Web サイトに詳しく説明されているので、ここでは詳しく説明しません。
上記のコードを使用すると、少数のクエリには比較的問題ありませんが、数千のクエリを実行する場合、Google がマシンを使用すると、上記の方法は効果的ではなくなります。頻繁にクロールして Google の検索結果を取得します。すぐに Google があなたの IP をブロックし、503 エラー ページを返します。これは私たちが望む結果ではないので、引き続き探索する必要があります
前述したように、urllib2 を使用すると、URL リクエストのヘッダーを設定し、ユーザー エージェントを偽装できます。簡単に言えば、ユーザー エージェントは、クライアント ブラウザーなどのアプリケーションによって使用される特別なネットワーク プロトコルであり、ブラウザー (電子メール クライアント/検索エンジン スパイダー) が HTTP リクエストを行うたびにサーバーに送信され、サーバーはユーザーを認識します。 (メールクライアント/検索エンジンスパイダー)を利用してアクセスします。 場合によっては、いくつかの目的を達成するために、サーバーを誠実に欺き、あなたへのアクセスにマシンを使用していないことをサーバーに伝える必要があります。
したがって、私たちのコードは次のようになります:
user_agents = ['Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0', \ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0', \ 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/533+ \ (KHTML, like Gecko) Element Browser 5.0', \ 'IBM WebExplorer /v0.94', 'Galaxy/1.0 [en] (Mac OS X 10.5.6; U; en)', \ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', \ 'Opera/9.80 (Windows NT 6.0) Presto/2.12.388 Version/12.14', \ 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) \ Version/6.0 Mobile/10A5355d Safari/8536.25', \ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) \ Chrome/28.0.1468.0 Safari/537.36', \ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; TheWorld)'] def search(self, queryStr): queryStr = urllib2.quote(queryStr) url = 'https://www.google.com.hk/search?hl=en&q=%s' % queryStr request = urllib2.Request(url) index = random.randint(0, 9) user_agent = user_agents[index] request.add_header('User-agent', user_agent) response = urllib2.urlopen(request) html = response.read() results = self.extractSearchResults(html)
user_agents リストを怖がらないでください。実際には 10 個のユーザー エージェント文字列です。これにより、さらに多くのユーザー エージェントが必要な場合は、を参照してください。ここにUserAgentString。
行 17 ~ 19 は、ユーザー エージェント文字列をランダムに選択し、リクエストの add_header メソッドを使用してユーザー エージェントを偽装することを示しています。
ユーザーエージェントを偽装することで、検索エンジンの結果をクロールし続けることができます。これが機能しない場合は、2 つのクエリごとに一定期間ランダムにスリープすることをお勧めします。これはクロール速度に影響しますが、これにより可能になります。結果をより継続的に取得するには、複数の IP がある場合、クロール速度も向上します。

ThedifferencebetweenaforloopandawhileloopinPythonisthataforloopisusedwhenthenumberofiterationsisknowninadvance,whileawhileloopisusedwhenaconditionneedstobecheckedrepeatedlywithoutknowingthenumberofiterations.1)Forloopsareidealforiteratingoversequence

Pythonでは、ループの場合は、反復の数がわかっている場合に適していますが、ループは反復の数が不明で、より多くの制御が必要な場合に適しています。 1)ループの場合は、簡潔なコードとPythonicコードを使用して、リスト、文字列などのトラバーシーケンスに適しています。 2)条件に応じてループを制御する必要がある場合やユーザーの入力を待つ必要がある場合、ループがより適切ですが、無限のループを避けるために注意を払う必要があります。 3)パフォーマンスに関しては、FORループはわずかに高速ですが、通常、違いは大きくありません。適切なループタイプを選択すると、コードの効率と読みやすさが向上します。

Pythonでは、リストを5つの方法でマージできます。1)シンプルで直感的なオペレーターを使用して、小さなリストに適しています。 2)extend()メソッドを使用して、頻繁に更新する必要があるリストに適した元のリストを直接変更します。 3)要素上でリストの分析式、簡潔、動作を使用する。 4)itertools.chain()関数を使用して効率的なメモリになり、大規模なデータセットに適しています。 5)要素をペアにする必要があるシーンに適しているように、 *演算子とzip()関数を使用します。各方法には特定の用途と利点と短所があり、選択する際にはプロジェクトの要件とパフォーマンスを考慮する必要があります。

forlopseused whenthentheNumberofiterationsiskが、whileloopsareuseduntiLaconditionismet.1)forloopsareideal for sequenceslikelists、usingsintaxlike'forfruitinfruits:print(fruit) '.2)

toconcatenatealistoflistsinpython、useextend、listcomprehensions、itertools.chain、またはrecursivefunctions.1)extendistraighttraightrawardbutverbose.2)listcomprehesionsionsionsionsionsionsionsionsionsionsionsionsionsionsionsised effective forlargerdatasets.3)itertools.chainmerymery-emery-efforience-forforladatas

Tomergelistsinpython、あなたはオペレーター、extendmethod、listcomfulting、olitertools.chain、それぞれの特異的advantages:1)operatorissimplebutlessforlargelist;

Python 3では、2つのリストをさまざまな方法で接続できます。1)小さなリストに適したオペレーターを使用しますが、大きなリストには非効率的です。 2)メモリ効率が高い大規模なリストに適した拡張方法を使用しますが、元のリストは変更されます。 3)元のリストを変更せずに、複数のリストをマージするのに適した *オペレーターを使用します。 4)Itertools.chainを使用します。これは、メモリ効率が高い大きなデータセットに適しています。

Join()メソッドを使用することは、Pythonのリストから文字列を接続する最も効率的な方法です。 1)join()メソッドを使用して、効率的で読みやすくなります。 2)サイクルは、大きなリストに演算子を非効率的に使用します。 3)リスト理解とJoin()の組み合わせは、変換が必要なシナリオに適しています。 4)redoce()メソッドは、他のタイプの削減に適していますが、文字列の連結には非効率的です。完全な文は終了します。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。
