クロールの過程では、しばしば反クロール機構に遭遇するため、これらの障害物を回避するにはいくつかのツールやテクニックを使用する必要があります。その中でも正規表現は非常に重要なツールであり、クローラでデータの照合や処理を行うのに役立ちます。以下では、Python 正規表現を使用してクローリングとアンチクローリングを行う方法を紹介します。
正規表現は、テキスト パターンを記述するために使用されるツールです。特定の記号や単語を通じてターゲット文字列を記述することができます。 Python では、 re モジュールを使用して正規表現を操作できます。
たとえば、電話番号 (xxx-xxxx-xxxx 形式) を照合する場合は、次の正規表現を使用できます。
import re regex = re.compile(r'd{3}-d{4}-d{4}')
この正規表現では、 d
は数字の一致を意味し、{3}
は 3 つの数字の一致を意味し、{4}
は 4 つの数字の一致を意味し、-
はハイフンの一致を意味します。この正規表現により、パターンに一致する電話番号を照合できます。
クロール防止の前に、まず対象の Web サイトのコンテンツをクロールする必要があります。 Python では、リクエスト ライブラリを使用して Web ページのコンテンツを取得できます。たとえば、まおやん映画のランキング ページを取得したい場合は、次のコードを使用できます。
import requests url = 'https://maoyan.com/board' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3' } response = requests.get(url, headers=headers) html = response.text
このうち、headers
パラメータは偽造されたリクエスト ヘッダーであり、これが役立ちます。私たちはいくつかのアンチクローラーメカニズムをバイパスします。 response.text
は取得したWebページの内容を表します これで、対象のWebページのソースコードが取得できました。
Web ページのソース コードを取得した後、正規表現を使用して必要な情報を抽出する必要があります。 Maoyan の映画ランキングを例に挙げると、ランキング内のすべての映画の名前と公開時間を取得したいと考えています。ソース コードを見ると、この情報が次の HTML タグに含まれていることがわかります:
<dd> <div class="movie-item-info"> <p class="name"><a href="/films/1211269" title="误杀" data-act="boarditem-click" data-val="{movieId:1211269}">误杀</a></p> <p class="star"> 主演:肖央,谭卓,钟南山 </p> <p class="releasetime">上映时间:2020-12-04</p> </div> <div class="movie-item-number score-num"> <p class="score"><i class="integer">9.</i><i class="fraction">7</i></p> </div> </dd>
次の正規表現を使用して、映画名とリリース時刻を照合できます:
pattern = re.compile('<p class="name"><a href="/films/d+" title="(.*?)" data-act="boarditem-click".*?<p class="releasetime">(.*?)</p>', re.S)
正規表現では、.*?
は非貪欲一致、つまり必要なテキスト コンテンツのみを一致させることを表します。 re.S
は、.
が改行文字を含む任意の文字に一致することを意味します。これで、映画のタイトルと公開時期に一致する正規表現が構築されました。
次に、正規表現の findall
メソッドを使用して、一致する結果を抽出します。
movies = re.findall(pattern, html)
この操作は、各要素が含まれるリストを返します。映画名と公開時間をそれぞれ表すタプル。これで、まおやん映画ランキングページのすべての映画情報をクロールすることに成功しました。
クロール対策の前に、アクセス頻度制限の設定、IP ブロック、Web サイトで使用される一般的なクロール対策方法を理解する必要があります。等これらのクローラ対策メカニズムを回避するには、ユーザーの通常の動作をシミュレートする必要があります。たとえば、Maoyan の映画ランキング ページをクロールするときに、ランダムな時間間隔を設定して、Web を閲覧する人間の動作をシミュレートできます。
import time interval = random.uniform(0, 3) time.sleep(interval)
このコード スニペットでは、random.uniform(0, 3 )
は 0 から 3 までの乱数を生成することを意味し、time.sleep(interval)
はプログラムを対応する時間待機させることを意味します。
一部の Web サイトでは、ページで動的読み込みテクノロジーを使用しています。つまり、ページ コンテンツを動的に生成するには、JavaScript やその他のスクリプト言語を使用する必要があります。 。この種のページを取得するためにリクエスト ライブラリを直接使用する場合、取得できるのは静的な HTML コードのみであり、動的に生成されたコンテンツは取得できません。現時点では、Selenium ライブラリを使用して人間の操作をシミュレートし、ブラウザがページ コンテンツを正常にロードできるようにすることができます。たとえば、Weibo のコメント ページを取得したい場合は、次のコードを使用できます。
from selenium import webdriver url = 'https://weibo.com/xxxxxx' browser = webdriver.Firefox() browser.get(url) time.sleep(10) html = browser.page_source
上記のコードを通じて、動的読み込みによって生成されたコメント エリアを含む完全なページ コンテンツを取得できます。
概要
この記事では、Python 正規表現を使用してクロールおよびクロール防止を行う方法を紹介します。主な内容は次のとおりです。
これらのヒントが、クロールとクロール防止を改善し、より多くのターゲット データを取得するのに役立つことを願っています。
以上がクロールおよびクロール防止に Python 正規表現を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。