🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

Q&A

解決済

1回答

1035閲覧

BeautifulSoup bs4 HTML解析と取得について

yoshidayuta

総合スコア15

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Beautiful Soup

Beautiful Soupは、Pythonのライブラリの一つ。スクレイピングに特化しています。HTMLデータの構文の解析を行うために、HTMLタグ/CSSのセレクタで抽出する部分を指定することが可能です。

Python 3.x

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

0グッド

0クリップ

投稿2021/01/19 11:28

編集2021/01/19 11:30

#課題・問題
pythonでスクレイピングをしようとしています。
bs4を用いてURL取得⇨HTML取得⇨HTML解析⇨HTMLテキスト取得をしようとしていますが、

<body>部分がうまく取得できません。
from bs4 import BeautifulSoup import urllib.request as req get_url = browser.current_url url = get_url response = req.urlopen(url) parse_html = BeautifulSoup(response,'html.parser') print(parse_html)

##HTML出力結果

<html> <head> 省略 </head> <body> <noscript>You need to enable JavaScript to run this app.</noscript> **<div id="root"></div>** <script>!function (l) { function e(e) { for (var r, t, n = e[0], o = e[1], u = e[2], f = 0, i = []; f < n.length; f++) t = n[f], p[t] && i.push(p[t][0]), p[t] = 0; for (r in o) Object.prototype.hasOwnProperty.call(o, r) && (l[r] = o[r]); for (s && s(e); i.length;) i.shift()(); return c.push.apply(c, u || []), a() } function a() { for (var e, r = 0; r < c.length; r++) { for (var t = c[r], n = !0, o = 1; o < t.length; o++) { var u = t[o]; 0 !== p[u] && (n = !1) } n && (c.splice(r--, 1), e = f(f.s = t[0])) } return e } </body>

このように**<div id="root"></div>**部分の中身が解析されず、取得できません。
解決策お教えていただきたいです。

補足

chromeのJavaScriptは有効にしてあります

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

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

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

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

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

_whitecat_22

2021/01/19 11:34

スクレイピングをしたいhtmlの内容を質問に追記いただけると、回答を得られやすいと思います。
guest

回答1

0

ベストアンサー

取得できません。

空という中身が取得されているので、これはこれで正しい動作です。

JavaScriptで中身を追加しているのでしょう。

response = req.urlopen(url)

で取得するのはJavaScript動作前の生のHTMLです。
JavaScriptを使用したページの取得には、ブラウザ+Selenium等を使います。

投稿2021/01/19 11:38

otn

総合スコア85882

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

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

yoshidayuta

2021/01/22 08:18

response = browser.page_souce を実行でJava動作後のHTMLを取得できました。 ヒントありがとうございます。
otn

2021/01/22 08:50

ああ、よく見ると、seleniumを使っていながら、urlopenとbs4を併用していたのですね。 seleniumだけで完結しましょう。bs4も不要です。
yoshidayuta

2021/01/22 09:26

seleniumとBeautifulSoupは併用するとダメなんですか?
otn

2021/01/22 11:59

駄目では無いですが、必要が無い。意味が無い。
yoshidayuta

2021/01/23 01:21

なるほどですね わかりました!消しておきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問