どうもこんにちは、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ファイルのタグを解析して欲しい情報を抽出することができるライブラリです。
では先ほどのソースコードに加えて実際にやってみます。
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でした!
コメント