質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1528閲覧

Pythonでスクレイピングでわからないこと

Mr_K

総合スコア28

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/08/19 07:33

https://filmarks.com//movies/56770

このサイトにあるview数をBeutifulSoupを用いて取ってきたいのです。

以下が行ったことです。
検証より、
<span class="c-content__count">99770</span>

となっている行があったため、

Python

1review_count = t_soup.find_all("span", class_= "c-content__count") 2for rc in review_count: 3 print(rc.text) 4 print()

を行ったところ、
{{ viewingMarkCount }}
{{ viewingClipCount }}
というのが多数返ってきました。

この中身の値が欲しいのですがどなたかわかる方いらっしゃいますか??

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Web 上に表示される HTML の内容には次の2種類があります。

  • 最初から HTML ファイルに記載されているもの

→ Chrome で「Ctrl + U」で閲覧できるソース
→ requests.get() で取得したソースはこれ

  • Javascript で後から挿入しているもの

→ Chrome で 「Ctrl + Shift + I」の開発者ツールで閲覧できるソース
→ ブラウザで実際にレンダリングする必要があるため、requests.get() で取得したソースには含まれていない
→ Javascript のレンダリングが必要なので、Selenium を使う必要があり

今回の場合、「Ctrl + U」で確認したソースに <span class="c-content__count">99770</span> は存在しないので、あとから Javascript で挿入していると推測されます。
なので、質問のやり方ではその span タグの値の取得は無理です。

ソースを眺めてみると、meta タグに以下があるので、こっちであれば、requests.get() で取得したソースに含まれるので、取得可能です。

html

1<meta content="レビュー数:99806件 / 平均スコア:★★★★4.0点" property="og:description" />

python

1import re 2 3import requests 4from bs4 import BeautifulSoup 5 6url = "https://filmarks.com//movies/56770" 7res = requests.get(url) 8 9soup = BeautifulSoup(res.content) 10 11# 次のタグを探す <meta content="レビュー数:99806件 / 平均スコア:★★★★4.0点" property="og:description" /> 12# `レビュー数` が content 属性に含まれる meta タグを探す 13meta_tag = soup.find("meta", content=lambda x: x and "レビュー数" in x) 14 15# レビュー数:99806件 / 平均スコア:★★★★4.0点 から正規表現で件数だけ取り出す。 16n_review = re.search(r"(\d)件", meta_tag["content"]).group(1) 17print(n_review)

タグがとれないと思ったら、「Ctrl + U」で閲覧できるソースに含まれているかどうかを確認してください。
そこになければ、requests では無理です。

投稿2020/08/19 08:15

編集2020/08/19 08:16
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_K

2020/08/20 17:46

ご回答ありがとうございました! 補足と言っては何なのですが, re.search(r"(\d*)件", meta_tag["content"]).group(1) 「*」をつけることで全桁入手できることがわかりました。 大変、勉強になりました。ありがとうございました。 失礼いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問