Web Crawlerは、スクレーパーAPIの組み込み機能です。これは、ターゲットURLを発見し、関連するコンテンツを選択し、大量に配信するために使用されるツールです。すべてのコンテンツまたは選択した基準に基づいて必要なデータのみを迅速に配信するために、リアルタイムおよび大規模なWebサイトをクロールします。
Web Crawlerができる3つの主要なタスクがあります。
URL発見を実行します。
サイトのすべてのページをクロールします。
ドメイン上のすべてのURLをインデックスします。
サイトをクロールしてバルクで解析されたデータを受信する必要がある場合、および特定のカテゴリまたはWebサイト全体からURLのリストを収集する必要がある場合に使用します。
Web Crawlerを使用するときに受信できる3つのデータ出力タイプがあります:URLのリスト、解析結果、およびHTMLファイル。必要に応じて、Web Crawlerを設定して結果をクラウドストレージにアップロードできます。
幅と深さをフィルターで調整することで、クロールスコープを簡単に制御できます。 Web Crawlerは、地理ロケーションやユーザーエージェントなどのさまざまなスクレイピングパラメーターを使用して、クロールするジョブの成功率を高めることもできます。これらのスクレイピングパラメーターのほとんどは、使用するスクレーパーAPIに依存します。
クロールする仕事を制御するには、異なるエンドポイントを使用する必要があります。仕事を開始し、停止し、再開し、仕事情報を取得し、結果チャンクのリストを取得し、結果を得ることができます。以下は、このクロールするチュートリアルで使用するエンドポイントです。詳細と出力の例については、ドキュメントをご覧ください。
エンドポイント: https://ect.oxylabs.io/v1/jobs
方法: POST
認証: Basic
リクエストヘッダー: Content-Type: application/json
このエンドポイントは、ジョブの処理中に見つかったURLのリストを配信します。
endpoint: https://ect.oxylabs.io/v1/jobs/{id}/sitemap
方法: GET
認証: Basic
エンドポイント: https://ect.oxylabs.io/v1/jobs/{id}/aggregate
方法: GET
認証: Basic
集約結果は多くのデータで構成される可能性があるため、指定したチャンクサイズに基づいて複数のチャンクに分割します。このエンドポイントを使用して、使用可能なチャンクファイルのリストを取得します。
エンドポイント: https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
方法: GET
認証: Basic
このエンドポイントを使用すると、集計結果の特定のチャンクをダウンロードできます。応答本体の内容は、選択した出力タイプによって異なります。
結果は次のいずれかになります。
インデックス(URLのリスト)
すべての解析結果を持つ集約JSONファイル
すべてのHTML結果を備えた集約JSONファイル
あなたの便利さのために、以下の表に使用できるすべての利用可能なパラメーターを配置しました。また、ドキュメントにもあります。
パラメーター | 説明 | デフォルト値 |
---|---|---|
URL | 開始点のURL | - |
filters | これらのパラメーターは、クロールするジョブの幅と深さを構成するために使用され、最終結果にどのURLを含めるべきかを決定します。詳細については、このセクションを参照してください。 | - |
filters:crawl | URLS Web Crawlerが最終結果に含めるかを指定します。詳細については、このセクションを参照してください。 | - |
filters:process | URLS Web CrawlerがスクレイプするどのURLSを指定します。詳細については、このセクションを参照してください。 | - |
filters:max_depth | Web Crawlerが続くURLチェーンの最大長を決定します。詳細については、このセクションを参照してください。 | 1 |
scrape_params | これらのパラメーターは、スクレイピングジョブの実行方法を微調整するために使用されます。たとえば、サイトをrawっている間にJavaScriptを実行することを望んでいるか、特定の場所からプロキシを使用することを好む場合があります。 | - |
scrape_params:source | 詳細については、このセクションを参照してください。 | - |
scrape_params:geo_location | 結果を適応させるべき地理的位置。詳細については、このセクションを参照してください。 | - |
scrape_params:user_agent_type | デバイスの種類とブラウザ。詳細については、このセクションを参照してください。 | desktop |
scrape_params:render | JavaScriptレンダリングを有効にします。ターゲットがコンテンツをロードするためにJavaScriptが必要な場合に使用します。この機能を使用する場合は、パラメーター値をHTMLに設定します。詳細については、このセクションを参照してください。 | - |
output:type_ | 出力タイプ。サイトマップ(クロール中に見つかったURLのリスト)またはHTMLの結果または解析データを含む集計ファイルを返すことができます。詳細については、このセクションを参照してください。 | - |
upload | これらのパラメーターは、クラウドストレージの場所を説明するために使用されます。クラウドストレージの場所では、完了したら結果を配置してほしいと思います。詳細については、このセクションを参照してください。 | - |
upload:storage_type | クラウドストレージタイプを定義します。唯一の有効な値はS3です(AWS S3の場合)。 GCS(Google Cloudストレージ用)はまもなく登場します。 | - |
upload:storage_url | ストレージバケットURL。 | - |
これらのパラメーターを使用することは、リクエストペイロードでそれらを渡すことができるため、簡単です。以下に、Pythonのコード例を見つけることができます。
簡単にするために、郵便配達員を使用してクロールリクエストを行うことができます。このPostmanコレクションをダウンロードして、Web Crawlerのすべてのエンドポイントを試してください。次のように、次の段階的なビデオチュートリアルを紹介します。
Webサイトのクロール方法:ステップバイステップガイド
PythonでHTTPリクエストを作成するには、リクエストライブラリを使用します。端末に以下を入力してインストールしてください。
pip install requests
HTMLの結果に対処するために、BeautifulSoup4ライブラリを使用して結果を解析し、それらをより読みやすくします。この手順はオプションですが、次のようなライブラリをインストールできます。
pip install BeautifulSoup4
次の例では、 sitemap
パラメーターを使用して、Amazonのホームページをクロールし、開始ページ内にあるURLのリストを取得するジョブを作成します。 crawl
とprocess
パラメーターが“.*”
に設定されているため、Web CrawlerはAmazon URLをフォローして返します。これらの2つのパラメーターは、正規式(Regex)を使用して、どのURLをrawいて処理するかを決定します。詳細と便利なリソースについては、必ずドキュメントをご覧ください。
まだURLからコンテンツをスクレイピングしていないため、 source
パラメーターを含める必要はありません。 json
モジュールを使用して、データを.JSONファイルに書き込み、次にpprint
モジュールを使用して、構造化されたコンテンツを印刷します。例を見てみましょう:
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Crawl all URLs inside the target URL.
payload = {
"url" : "https://www.amazon.com/" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"user_agent_type" : "desktop" ,
},
"output" : {
"type_" : "sitemap"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_sitemap.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
リクエストサイズに応じて、プロセスには少し時間がかかる場合があります。ジョブ情報を確認することで、ジョブが終了することを確認できます。完了したら、 SiteMap Endpoint https://ect.oxylabs.io/v1/jobs/{id}/sitemap
に別のリクエストを送信して、URLのリストを返します。例えば:
import requests , json
from pprint import pprint
# Store the JSON response containing URLs (sitemap).
sitemap = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/sitemap' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'sitemap.json' , 'w' ) as f :
json . dump ( sitemap . json (), f )
# Print the decoded JSON response.
pprint ( sitemap . json ())
解析されたコンテンツを取得するには、 parsed
パラメーターを使用します。以下の例を使用して、このAmazonページにあるすべてのURLをクロールし、各URLのコンテンツを解析できます。今回は、指定されたAmazonページからコンテンツをスクレイピングしているため、 amazon
ソースを使用しています。それでは、このすべてがPythonにまとめられているのを見てみましょう。
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Parse content from the URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "amazon" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "parsed"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_parsed.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
Amazonページを削減するときにgeo_location
パラメーターを使用する場合は、その値を優先場所のzip/郵便番号に設定する必要があることに注意してください。詳細については、ドキュメントのこのページをご覧ください。
ジョブが完了したら、リクエストが生成したチャンクの数を確認してから、このエンドポイントで各チャンクからコンテンツをダウンロードできます: https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
{did }/aggregate/ {chunk https://ect.oxylabs.io/v1/jobs/{id}/aggregate/{chunk}
。たとえば、次のコードスニペットを使用して、最初のチャンクを印刷します。
import requests , json
from pprint import pprint
# Store the JSON response containing parsed results.
parsed_results = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Write the decoded JSON response to a .json file.
with open ( 'parsed_results_1.json' , 'w' ) as f :
json . dump ( parsed_results . json (), f )
# Print the decoded JSON response.
pprint ( parsed_results . json ())
HTMLの結果を取得するコードは、前のセクションのコードとはあまり違いはありません。唯一の違いは、 type_
パラメーターをhtml
に設定したことです。コードサンプルを見てみましょう。
import requests , json
from pprint import pprint
# Set the content type to JSON.
headers = { "Content-Type" : "application/json" }
# Index HTML results of URLs found in the target URL.
payload = {
"url" : "https://www.amazon.com/s?i=electronics-intl-ship&bbn=16225009011&rh=n%3A502394%2Cn%3A281052&dc&qid"
"=1679564333&rnid=502394&ref=sr_pg_1" ,
"filters" : {
"crawl" : [ ".*" ],
"process" : [ ".*" ],
"max_depth" : 1
},
"scrape_params" : {
"source" : "universal" ,
"user_agent_type" : "desktop"
},
"output" : {
"type_" : "html"
}
}
# Create a job and store the JSON response.
response = requests . request (
'POST' ,
'https://ect.oxylabs.io/v1/jobs' ,
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here
headers = headers ,
json = payload ,
)
# Write the decoded JSON response to a .json file.
with open ( 'job_html.json' , 'w' ) as f :
json . dump ( response . json (), f )
# Print the decoded JSON response.
pprint ( response . json ())
繰り返しますが、結果の各チャンクを取得するようにリクエストする必要があります。 beautifulsoup4ライブラリを使用してHTMLを解析しますが、このステップはオプションです。次に、解析されたコンテンツを.htmlファイルに書き込みます。以下のコードの例は、最初のチャンクからコンテンツをダウンロードします。
import requests
from bs4 import BeautifulSoup
# Store the JSON response containing HTML results.
html_response = requests . request (
'GET' ,
'https://ect.oxylabs.io/v1/jobs/{id}/aggregate/1' , # Replace {id] with the job ID.
auth = ( 'USERNAME' , 'PASSWORD' ), # Your credentials go here.
)
# Parse the HTML content.
soup = BeautifulSoup ( html_response . content , 'html.parser' )
html_results = soup . prettify ()
# Write the HTML results to an .html file.
with open ( 'html_results.html' , 'w' ) as f :
f . write ( html_results )
# Print the HTML results.
print ( html_results )
要件ごとに必要に応じてコードファイルを変更できます。
このチュートリアルは、Web Crawlerを使用する基本的な側面について説明しました。エンドポイントとクエリパラメーターの使用に関する詳細については、ドキュメントをご覧ください。ご質問がある場合は、いつでも[email protected]またはライブチャットから連絡してください。