search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

映画.comから人気映画をスクレイピング

こんにちは、3年のまるです。アドベントカレンダー20日目です。
前回は、@hcpmiyukiさん(先輩)の【GCP】【Python】Google Cloud FunctionsでサーバーレスにAPIをデプロイ!でした!
最近はあまり外出していないので、コロナが収まったら美味しいご飯を食べにいきたいです。
よろしくお願いします。

目標

映画.comのホームページから今人気の映画のタイトルと公開日を数行のコードでスクレイピングします。

方法

Webスクレイピングには色々なやり方がありますが、今回はめっちゃ簡単な、XPathとCSSセレクターを利用する方法でやっていきます。
初めてスクレイピングする方は一度この方法でやってみて欲しいです!爆速で出来ます

準備

ライブラリをインストールします。
Requests、lxml、cssselectの3つを使います。

$ pip install requests
$ pip install lxml
$ pip install cssselect

CSSセレクターとXpathの確認方法

Chromeのデベロッパーツールを使います。

要素を右クリック > Copy > Copy XPath(または Copy selector)
でコピーできます。

映画.comスクショ.png

実際にコードを書く

コードはこれだけです。少なくて素敵!関数使うと尚良きですね。

scray.py

import requests
import lxml.html

#映画.comのURLを指定して、HTMLソースを得る
r = requests.get("https://eiga.com/ranking/")
html = r.text

#HTMLをHtmlElementオブジェクトにする
root = lxml.html.fromstring(html)

print("映画ランキング第1位")

#Xpathを指定して、映画タイトルをスクレイピング
rank1_title = root.xpath("//*[@id='document_2575126293']/main/div/div/section[1]/table/tbody/tr[1]/td[2]/div/h2/a")

print(rank1_title[0].text)

#CSSセレクターで指定して、公開日をスクレイピング
rank1_day = root.cssselect("#document_2575126293 > main > div > div > section:nth-child(4) > table > tbody > tr:nth-child(1) > td.img > small")

print(rank1_day[0].text)

#2位, 3位も同様にコードを書きます

print('----------------------------')
print("映画ランキング第2位")

rank2_title = root.xpath("//*[@id='document_2575126293']/main/div/div/section[1]/table/tbody/tr[2]/td[2]/div/h2/a")

print(rank2_title[0].text)

rank2_day = root.cssselect("#document_2575126293 > main > div > div > section:nth-child(4) > table > tbody > tr:nth-child(2) > td.img > small")

print(rank2_day[0].text)

print('----------------------------')
print("映画ランキング第3位")

rank3_title = root.xpath("//*[@id='document_2575126293']/main/div/div/section[1]/table/tbody/tr[3]/td[2]/div/h2/a")

print(rank3_title[0].text)

rank3_day = root.cssselect("#document_2575126293 > main > div > div > section:nth-child(4) > table > tbody > tr:nth-child(3) > td.img > small")

print(rank3_day[0].text)

結果

実行すると、

映画ランキング第1位
劇場版「鬼滅の刃」無限列車編
劇場公開日:2020年10月16日
----------------------------
映画ランキング第2位
新解釈・三國志
劇場公開日:2020年12月11日
----------------------------
映画ランキング第3位
天外者(てんがらもん)
劇場公開日:2020年12月11日

うまく取ってこれました!

おわりに

読んでくれてありがとうございました。
間違っている点などございましたら、ご指摘いただけると嬉しいです!

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
3