Requests-get メソッドは次を使用します。
https://books.toscrape.com/ Web サイトを例として取り上げます。
Webページを開く
最初に Web ページを開き、右クリックして確認し、ネットワーク列を見つけます。この時点では、下部が空白で何も表示されていないことがわかります。更新するだけです。更新後: 最初の列をクリックして次を表示し
ます
。
リクエストメソッドが「GET」メソッドであることがわかり、リクエストされたURLも確認できます。
ページの下部で複数のページを見つけることができます。次のページをクリックしてページの確認を続けます。
今度は同じ形式を使用し、「https://books.toscrape.com/catalogue/page-1」と入力します。 .html」を表示するには、ホームページに戻ってください。通常、最初のページがホームページであるため、次のパスに /catalogue/page-2.html は追加されず、さらにいくつかのページを参照すると見つけることができます。
コードを使用してページのコンテンツを取得する
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}
まず、クローラーのヘッダーを追加します。これは、多くのページにはクローラーに対するクロール対策の制限があるためです。ヘッダーを追加すると、通常のブラウザーのリクエストをシミュレートできるようになり、成功率が高くなります。この部分は、アクセスされるページのリクエスト ヘッダー セクションにあります。
url = "https://books.toscrape.com/catalogue/page-1.html"
このセクションでは、アクセスする URL を宣言します。
responce = requests.get(url,headers=headers).text
この部分を逆アセンブルします
。requests.get(url, headers=headers): 対応するリクエスト ヘッダーを使用して、GET モードで上記の URL にアクセスします。
request.get(url,headers=headers).text: 上記の内容をテキストとして返します。
response =requests.get(url,headers=headers).text: 変数responseに内容を返します。
結果を見る
実行後、該当ページの内容が表示されます。ただし、形式は少し面倒なので、いくつかの方法を使用して調整できます。
ページ形式の変更
今回はBeautifulSoupというライブラリを紹介します。BeautifulSoup は、HTML および XML ドキュメントからデータを抽出するための Python ライブラリです。これらのドキュメントを解析して横断するための簡単かつ柔軟な方法を提供し、特定の情報を簡単に抽出できるようになります。
soup = BeautifulSoup(responce,"html.parser")
このステップの意味は、BeautifulSoup を使用して取得した Web ページのコンテンツ (応答テキスト) を解析し、その中のデータを簡単に抽出して操作できるようにすることです。この手順を行わないと、BeautifulSoup の機能を使用して Web ページのコンテンツを解析することはできません。解析を行わないと、プレーン テキストの応答が返されるだけなので、必要な特定のデータを直接抽出することが困難になります。必要な情報を見つけて抽出するには応答コンテンツを手動で処理する必要がありますが、これは非常に面倒でエラーが発生しやすくなります。
print (soup) では、ページ形式がはるかに単純であることがわかります。
文法説明:
応答: これは必須パラメータであり、解析される文書の内容を示します。この例では、応答は HTTP リクエストの送信によって取得される Web ページのコンテンツ、つまりサーバーから返される応答テキストです。これは、HTML ドキュメントのコンテンツを含む文字列型の変数です。
"html.parser": これは 2 番目のパラメーターで、使用するパーサーを指定します。この場合、「html.parser」と呼ばれる Python の組み込み HTML パーサーが使用されます。このパーサーは BeautifulSoup ライブラリの不可欠な部分であり、さらなる処理と抽出のために HTML ドキュメントを解析ツリーに変換できます。
他のオプションのパーサーは「lxml」と「html5lib」です。これらはすべて、異なる機能とパフォーマンスを備えたサードパーティのライブラリです。適切なパーサーの選択は、ニーズと環境によって異なります。
要約すると、BeautifulSoup(response, "html.parser") の 2 つのパラメーターは、それぞれ、解析されるドキュメントの内容と使用されるパーサーの種類を表します。
クロールタイトル
クローラーを使用すると、コンテンツがクロールされ、次に本のタイトルがクロールされます。
このアイデアは、対応するページの URL、リクエスト ヘッダーの構成、ページ コンテンツの表示、コード パラメーターの構成といういくつかのステップに大別されます。URLとリクエストヘッダーの設定が完了しました 次にページの内容を確認します 本のタイトルを確認する箇所の特徴は何ですか?外側にh3があり、内側がh3で囲まれていることが
分かります
a タグ 次に、コードを見てみましょう。
soup = BeautifulSoup(responce,"html.parser")
all_title = soup.findAll("h3")
スープ内のすべてのコンテンツを検索し、「h3」タグに含まれるコンテンツを検索して、出力を確認します。「h3」タグのコンテンツは
確かに出力されていることがわかりますが、その内容は実際のものではありません。次に、フィルタリングする必要があります。コードを参照してください。
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title)
次に、各「h3」タグのコンテンツを走査し、「a」タグのコンテンツを見つけて出力を表示します。「
a」タグのコンテンツについては、HTML 内のタグだけが必要です。 HTML テキストではパラメータを追加し続けます。コードを参照してください。
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title.string)
ここでは、最終的な印刷を制限し、タイトルの文字列型を出力します。つまり、テキスト型が含まれている限り、出力を確認します。本のタイトルのみが出力されていることがわかります
。まさに私たちが望んでいる効果です。
コメント付きの完全なコード
コード
from bs4 import BeautifulSoup
import requests
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
}#请求头改成自己的
url = "https://books.toscrape.com/catalogue/page-1.html"
responce = requests.get(url,headers=headers).text
soup = BeautifulSoup(responce,"html.parser")
all_title = soup.findAll("h3")
for i in all_title:
title = i.find("a")
print(title.string)
ノート
-
from bs4 import BeautifulSoup
: BeautifulSoup ライブラリをインポートします。これは、解析および抽出関数を使用するためです。 -
import requests
: HTTP リクエストを送信して Web ページのコンテンツを取得するために使用されるリクエスト ライブラリをインポートします。 -
headers = {...}
headers
:リクエストヘッダー情報を含む辞書型の変数を定義します。User-Agent フィールドは、リクエストを送信するブラウザをシミュレートするためにリクエスト ヘッダー情報に設定されます。 -
url = "https://books.toscrape.com/catalogue/page-1.html"
: クロールするターゲット Web ページの URL アドレスを定義します。 -
response = requests.get(url, headers=headers).text
: 指定された URL に HTTP GET リクエストを送信し、応答オブジェクトを取得します。.text
応答内容をテキストとして返します。取得した応答テキストをresponse
変数に代入します。 -
soup = BeautifulSoup(response, "html.parser")
: BeautifulSoup ライブラリを使用して、取得した応答テキストを解析し、BeautifulSoup オブジェクトを作成します。response
解析するドキュメント コンテンツとしてパラメーターを渡し、パーサー タイプは「html.parser」です。 -
all_title = soup.findAll("h3")
:findAll
BeautifulSoup オブジェクトのメソッドを使用して、すべての<h3>
タグを検索し、結果を変数に保存しますall_title
。findAll
一致するすべてのタグのリストを返します。 -
for i in all_title:
:all_title
リスト内の各要素を反復処理します。 -
title = i.find("a")
:メソッドを<h3>
使用して、現在の反復のラベルの中から最初のラベルを検索し、結果を変数に保存します。find
<a>
title
-
print(title.string)
:title
ラベルのテキスト内容、つまり本のタイトルを印刷します。.string
タグ内のテキストを取得するために使用します。
このコードの機能は、指定された Web ページから書籍のタイトル情報をクロールし、印刷することです。リクエスト ライブラリを使用して HTTP リクエストを送信して Web ページのコンテンツを取得し、BeautifulSoup ライブラリを使用して Web ページを解析して必要な情報を抽出します。最後に、ループを通じて各本のタイトルが印刷されます。
ページをめくってすべてをクエリする
詳しい紹介は次の記事に載せます。