PythonでWebスクレイピングをする方法はいくつかありますが、一般的にはRequestsモジュールとBeautifulSoupモジュールを使うことが多いです。
RequestsモジュールはWebサイトの情報を取得するためのモジュールで、BeautifulSoupモジュールはHTMLからデータを取り出すためのモジュールです。
今回は、実際に使えるPythonのサンプルコードで、具体的なWebスクレイピングの手順を説明します。
Webスクレイピングとは
Webスクレイピングとは、Webサイトから情報を抽出するコンピュータソフトウェア技術のことです。
Webスクレイピングでは、HTMLフォーマットからデータベースやスプレッドシートに格納・分析可能な構造化データへの変換に、より焦点が当てられています。
- Webサイト(非構造化データ)
- Webスクレイパー(情報抽出)
- データベース(構造化データ)
Webスクレイピングの目的と注意点
Webスクレイピングの目的は、Webから必要なデータを正しく収集することです。
Webスクレイピングによって、以下のようなことができます。
- マーケティングデータの収集・活用
- Webサービスやアプリケーションの開発
- 新たな情報の生成
Webスクレイピングにはメリットだけでなく、デメリットや注意点もあります。
例えば、以下のようなものがあります。
- Webサイトの利用規約や著作権に違反する可能性がある
- Webサイトの仕様変更やアクセス制限に対応する必要がある
- スクレイピングしたデータの品質や信頼性を確保する必要がある
Webスクレイピングを行う際には、これらの点に注意してください。
Webスクレイピングの使用例
一般的には、ショッピングサイトやニュース、SNSの記事などの情報収集にWebスクレイピングを使いことが多いです。
例えば、商品価格の比較、株価の監視、口コミの分析といったような用途で、ニュースサイトやブログ、ECサイトなどからデータを抽出したり、情報収集や教育目的で、特定のキーワードやカテゴリに関連するニュース記事のリンクを取得する。また、ニュースやSNS記事からテキストや画像を取得し、CSVファイルやデータベースに保存することもあります。
これらの例はどれもPythonを使って実現できます。
Pythonには、RequestsやBeautifulSoupの他にもWebスクレイピングを簡単に行えるライブラリが多数あります。
RequestsとBeautifulSoupモジュールについて
PythonでWebスクレイピングを作成する手順を紹介する前に、RequestsとBeautifulSoupモジュールについて少しだけ説明しておきます。
Requests
Requestsは、PythonでWebサービスとやりとりするためのモジュールです。
WebサイトからHTMLやJSONなどのデータを取得したり、HTTPメソッド(GETやPOSTなど)を使ってリクエストを送信したりすることができます。
Requestsを使うと、Webサイトの情報取得や画像の収集などを簡単に行えます。
BeautifulSoup
BeautifulSoupは、HTMLやXMLファイルからデータを取得し、解析するためのPythonのWebスクレイピング用のモジュールです。
スクレイピングしたWebページから特定の要素や属性を抽出したり、DOMツリーを操作したりすることができます。
BeautifulSoupはHTMLやXMLのパーサーをラップして扱いやすくするライブラリで、select
やfind
などのメソッドを使ってタグや属性にアクセスできます。
つまり、RequestsとBeautifulSoupを組み合わせると、Webスクレイピングを簡単に行うことができます。
まず、RequestsでWebページの内容を取得し、次にBeautifulSoupでHTMLを解析して必要な情報を抜き出すという流れです。
PythonでWebスクレイピングする方法
それぞれの具体的な手順について、コマンドやコードを使って説明します。
import requests from bs4 import BeautifulSoup
url = "https://www.example.com/" # スクレイピングしたいWebサイトのURL response = requests.get(url) # レスポンスオブジェクトを作成
html = response.text # HTMLを取得
soup = BeautifulSoup(html, "html.parser") # BeautifulSoupオブジェクトを作成
links = soup.find_all("a") # すべてのaタグ(リンク)を抽出 for link in links: # リンクごとにループ href = link.get("href") # href属性(リンク先)を取得 print(href) # href属性を表示
以上がPythonでWebスクレイピングをする方法の具体的な手順です。
Pythonを使ったWebスクレイピング
最後に、PythonのRequestsとBeautifulSoupモジュールを使ってWebスクレイピングをする例を、サンプルコードを書いてもっと詳しく使い方を説明します。
Yahoo!ニュースのトップページから、見出しとリンクを抽出して表示します。
# requestsモジュールとBeautifulSoupモジュールをインポートする import requests from bs4 import BeautifulSoup # WebサイトのURLを指定してレスポンスオブジェクトを作成する url = "https://news.yahoo.co.jp/" # スクレイピングしたいWebサイトのURL response = requests.get(url) # レスポンスオブジェクトを作成 # レスポンスオブジェクトのtext属性からHTML文書を取得する html = response.text # HTML文書を取得 # BeautifulSoup()関数でHTML文書を解析してBeautifulSoupオブジェクトを作成する soup = BeautifulSoup(html, "html.parser") # BeautifulSoupオブジェクトを作成 # BeautifulSoupオブジェクトのfind_all()メソッドで目的の要素や属性を抽出する headlines = soup.find_all("a", class_="sc-esjQYD") # すべてのaタグ(リンク)でclass属性が"sc-esjQYD"のもの(見出し)を抽出 # 抽出した要素や属性ごとにループして表示する for headline in headlines: # 見出しごとにループ text = headline.text # テキスト部分(見出し内容)を取得 href = headline.get("href") # href属性(リンク先)を取得 print(text) # テキスト部分(見出し内容)を表示 print(href) # href属性(リンク先)を表示
以上です。お疲れ様でした。
ちなみに、このコードはPython 3.9.7で動作確認済みです。
- Original:https://minory.org/python-web-scraping.html
- Source:Minory
- Author:管理者