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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

858閲覧

英語サイトでBeautifulSoupによるテキスト取得ができない

arron

総合スコア34

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/13 13:52

前提・実現したいこと

BeautifulSoupでWall Street JournalのwebsiteからHeadlineを抜き出したいと思っています。
findやcssセレクタを利用してHeadlineの該当するタグを特定しようとしましたが、うまくいかず。

発生している問題・エラーメッセージ

そもそも、タグの特定以前に、BeautifulSoupで取り出したすべてのhtmlデータの中に該当のテキストが入っていないことがわかりました。

該当のソースコード

python

1from bs4 import BeautifulSoup 2import requests 3 4wsj = 'https://www.wsj.com/' 5html = requests.get(wsj) 6soup = BeautifulSoup(html.content, 'html.parser') 7topics =soup.find('div',class_ = '*****') 8#*****にHeadlineを含むclassのタグ名を入れました 9print(topics) 10#結果はどのタグ名でもHeadlineのテキストを抜き出すことができませんでした。 11#CSSセレクタを利用してみましたがやはりうまくいきませんでした。 12 13print(soup) 14#試しにBeautifulSoupで取り出したすべてのhtmlデータをprintしてみたところ、そもそもHeadlineのテキストがどこにも含まれていないことがわかりました。 15

試したこと

Seleniumを利用してみましたが、やはりHeadlineのテキストが見当たりませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10 Home 2004
Python3.7
PyCharm 2020.3.5(Community Edition)

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

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

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

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

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

guest

回答1

0

ベストアンサー

たとえば下記のようにしてソースを抜くことはできましたが。何が不足していたのでしょうか。また、「Headlineのテキスト」とは具体的にどこの部分を指していますか。

python3

1import chromedriver_binary 2from selenium import webdriver 3 4options = webdriver.ChromeOptions() 5options.add_argument('--headless') 6driver = webdriver.Chrome(options=options) 7 8driver.get('https://www.wsj.com/') 9with open("test.txt", mode='w', encoding="utf-8") as f: 10 f.write(driver.page_source) 11driver.quit()

投稿2021/04/14 00:14

編集2021/04/14 00:15
jeanbiego

総合スコア3966

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

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

arron

2021/04/14 14:04

いただいたコードでうまくテキストが取得できました。ありがとうございました。 chromedriverの問題か、Seleniumのコードの書き方の問題か、これから検証します。 なぜBeautifulSoupでは取得できないのかも引き続き調べてみます。
jeanbiego

2021/04/14 14:10

なぜarronさんがseleniumで取得できていなかったのかはわかりませんが、 request+bs4で取れていないのは、「動的」なサイトだったからです。その組み合わせで取れるのは「静的」なサイトだけですね。ググれば解説がたくさんありますので、気になる場合は「動的 サイト」とかで検索してみてください。
arron

2021/04/15 12:57

アドバイスありがとうございます。 seleniumがワークしなかったのは、おそらくですが、chromedriver_binaryが正しくインストールされていなかったためではないかと思います。もう少し研究してみます。 助かりました。
arron

2021/04/17 07:44 編集

確認したところ、chromedriver_binaryが影響していたわけではありませんでした。 私の書いた元のコードとjeanbiegoさんとの違いは、textファイルに書き込むステップかと思います。 textファイルに書き込むのと書き込まないので結果が違う理由がよくわかりませんでした。 参考まで、私の元のコードを入れておきますね。 import chromedriver_binary from selenium import webdriver import time wsj = 'https://www.wsj.com/' driver = webdriver.Chrome() driver.get(wsj) time.sleep(1) page_source = driver.page_source.encode('utf-8') print(page_source) もし、理由がお分かりでしたらご指摘いただけますと助かります。 たびたびすみません。
jeanbiego

2021/04/18 01:34

URL末尾に謎の#039とかいう文字列がついているせいではなく? こちらの環境ではソースが表示されました。
arron

2021/04/18 04:41

すみません。URLはコピペしたのですが、謎文字がくっついてしまいました。コメント欄で修正しようとしたのですが何故か出来ず、そのままにしてしまいました。 しかし、そちらでソース表示されたということは、環境の違いなのかもしれないですね。 度々ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問