【Python】スクレイピングやってみた

Python

どうもこんにちは、Rumadra(@rumadra)です。

 

Pythonでやってみたいことといったら、Webサイトの文章などを抽出する

スクレイピング」ですよね!(個人的な感想

 

さっそく実装してみたので、簡単に紹介したいと思います。

 

実装に必要なもの

まずは必要なものについて整理します。

 

ざっくりこんな感じでしょうか。

Python 3系 (言うまでもないので、説明は省略します…)
Requestモジュール
BeautifulSoupモジュール
それぞれ順に説明していきます。

Requestモジュール

スクレイピングをするにはまずは欠かせません!

 

Webサイトにアクセスするのに必要なPython標準モジュールです。

 

ブラウザの代わりに、このモジュールを使ってスクレイピングしたいサイトにアクセスしてデータを取得することができます。

import requests

# リクエストしたURLからhtmlを取得する
def get_req(url):
    req = requests.get(url)
    print(req.text)
 
if __name__ == "__main__":
    # 今回はYahoo!ニュース様から取得します
    get_req("https://news.yahoo.co.jp")

 

実行結果:

<!DOCTYPE html><html lang="ja"><head><title data-reactroot="">Yahoo!ニュース</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" data-reactroot=""/><meta http-equiv="Content-Style-Type" content="text/css" data-reactroot=""/><meta http-equiv="Content-Script-Type" content="text/javascript" data-reactroot=""/><meta name="keywords" content="ニュース,ヤフー,新着" data-reactroot=""/>

<中略>


</body></html>

このようにリクエストしたWebサイトのHTMLを取得することができます。

 

極論を言ってしまえばこれだけでいいのですが、必要な情報だけほしいですよね。

 

そして一つ一つ手動で見ていくのは辛い!!

 

次のモジュールはそんな要望に応えてくれます。

 

BeautifulSoup

htmlファイルのタグを解析して欲しい情報を抽出することができるライブラリです。

 

このライブラリは pip install beautifulsoup4でインストールします。
では先ほどのソースコードに加えて実際にやってみます。
import requests
from bs4 import BeautifulSoup

def get_req(url):
    html = requests.get(url).text
    print("Response Body: " + html)
    return html

def get_title(html):
    beauti_soup = BeautifulSoup(req_html, features="html.parser")
    req_title = beauti_soup.title
    print("TITLE: " + req_title.string)

def get_h2(html):
    beauti_soup = BeautifulSoup(req_html, features="html.parser")
    h2_content = beauti_soup.find_all("h2")
    print("H2TAG: " + str(h2_content))

if __name__ == "__main__":
    # 取得するURL
    url = "https://news.yahoo.co.jp"

    # 取得したhtml
    req_html = get_req(url)
    
    # タイトルの取得
    get_title(req_html)
    
    # H2タグの取得
    get_h2(req_html)
実行結果:
TITLE: Yahoo!ニュース
H2TAG: [<h2 class="topics_title">トピックス</h2>, <h2 class="liveStream_contents_title">Yahoo!ニュース 動画</h2>, …<中略>

 

いい感じですね!

 

これを元に調整していけばより精度の高い抽出ができるようになるはずです!

 

今回は、一旦ここまでとしますが、今後も調整しつつやっていきたいと思います。

何かありましたら、コメント等お願いします!

 

以上、Rumadraでした!

コメント

タイトルとURLをコピーしました