Win11でpython3.11をIDLEで利用しています。
requestsとbs4でScraypingを使い、
https://jp.reuters.com/ をScrayping
chromeのWebの検証では、下記のように記事のhがあるのに?
html
<h1 data-testid="Heading" ***>G7首脳、ガザ戦闘停止求める イランにも関与自制を要請</h1>
soup.find_all("h1") では、「上記のhタグ見出し」が抽出されず、分野名やAdだけ。
soup.find_all("a") では、a-tagの記事見出しが抽出できる。
こんなことって、あるのでしょうか?
No.1ベストアンサー
- 回答日時:
> こんなことって、あるのでしょうか?
よくあることです。
requestsで取得するHTMLは、Chromeブラウザで見るには画面を右クリックして「ページのソースを表示」で表示される物と同一です。
ブラウザの検証(開発者ツール)で見られるのは、そのHTMLを取得後に、JavaScriptが動き出して、HTMLを書き換えた後の物です。これを得るためにはJavaScriptを実行する環境が必要です。
スクレイピングの方法として、大きく2通りあります。
・requestsを使いたい⇒ブラウザの開発者ツールじゃなくて「ソースを表示」を見る(そこにある物しか取得できない)
・ブラウザの開発者ツールにしか無いものを取得したい⇒requestsは使えないのでSelenium+ブラウザを使って、ブラウザにJavaScriptを実行してもらい、その結果を得る
教えてもらって確認したら、
ソースhtmlと、画面に表示される記事の検証のhtmlが異なっていた。
確かに記事はソースから作られた製造物になっている。
selenium4+pythonで最も簡単なものを作ってみた
driver.find_elements(By.TAG_NAME, 'h3')
動作してh3タグでトップ画面の見出し39件取得できましたが、それ以外によけいな分類部分など50件近く。
そこで、bs4のsoupのように
a タグと 属性と属性値で制限することはできないのでしょうか?
可能なら <a data-testid="Heading" 利用できる。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP reuterの記事をbeautiful.soup.find_all()で検索する方法 1 2023/11/25 07:40
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- Visual Basic(VBA) vba sortのやりかた 1 2021/12/21 09:39
- 統計学 統計学の質問です。 どなたか分かる方教えて頂けたら幸いです。 共通]下記の仮説の真偽を判断するため, 2 2021/12/21 18:13
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- Excel(エクセル) 関数で複数ある→以降の文字の抽出したい 4 2022/08/07 09:47
- Excel(エクセル) エクセルで#以降の文字を取得したい 1 2022/03/28 13:14
- レンタカー・カーシェアリング レンタカーの危険の記事を読みました。過失の無い傷等も請求されたとあります。 3 2021/12/11 19:52
- Excel(エクセル) スプレッドシートで抽出したい値があります。助けて下さい。 3 2021/12/11 10:58
- 統計学 統計的検定法について 2 2023/11/11 03:13
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
ファイル名に日本語は使っちゃダメなのですか?
その他(コンピューター・テクノロジー)
-
バッチファイルについて
その他(プログラミング・Web制作)
-
Pythonのre.split()の正規表現の使い方
その他(プログラミング・Web制作)
-
-
4
Excelで同じセルに2つの関数を入れたいです。 ifとVLOOKUP ifとX VLOOK UP
Excel(エクセル)
-
5
フォルダを自動作成・移動を複数ファイルに対して行うバッチ処理について
その他(プログラミング・Web制作)
-
6
プログラミングの勉強が進みません
HTML・CSS
-
7
C言語について。
C言語・C++・C#
-
8
Linux のシェルスクリプトの強制終了の仕方について
UNIX・Linux
-
9
htmlのエラーについて(デバッグ)
PHP
-
10
reuterの記事をbeautiful.soup.find_all()で検索する方法
PHP
-
11
Excel VBAマクロをマスターするのに、どれ位時間掛かりますか?
Visual Basic(VBA)
-
12
特定文字を入ってるCSVの特定の列を特定のexcelシートに取り込みたいです
Visual Basic(VBA)
-
13
CやJAVa,Rubyなどプログラミング言語の分岐のコードを思いつく限り教えてください。 if(◯
その他(プログラミング・Web制作)
-
14
Class ってぱいそんでならったけど使いますか?なんか習う割にはあんまり覚えてないし見ない気がする
Perl
-
15
HTMLソースが表示のページのものではない
その他(プログラミング・Web制作)
-
16
JRのjsonファイルって使って大丈夫そ?
その他(プログラミング・Web制作)
-
17
関数定義について質問です 架空のプログラミング言語ですが、こういう関数があった時、何を返してくれそう
その他(プログラミング・Web制作)
-
18
そのまま使っただけなのに・・・python
その他(プログラミング・Web制作)
-
19
どなたかこのプログラミングを完成させて欲しいです。 ヒントはこちらです↓ 青色:ゲームプログラムのル
C言語・C++・C#
-
20
パイソンの
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<div id="container">の使いか...
-
htmlのolやulなどlistにtitleや...
-
html の divとtable の役割
-
HTML属性での「""」 「''」違い
-
html5でheaderの中にnav
-
複数のボタンを等間隔に、かつ...
-
ヘッダーを左右に二分割する方...
-
オシャレな区切り線はありませ...
-
要素間、要素内に隙間が空く
-
body>div{}の意味を知りたい
-
画面を拡大すると横幅が切れる
-
div要素が重なってします
-
divとpの使いわけ
-
iframeを使わずに上下50%ずつに...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
float:leftを使用して全体を中...
-
1時間30分を簡単に表したいで...
-
htmlの文字が縦書きになる
-
【ヒトの神秘】美男美女から何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
htmlのolやulなどlistにtitleや...
-
HTML属性での「""」 「''」違い
-
div要素が重なってします
-
<div id="container">の使いか...
-
複数のボタンを等間隔に、かつ...
-
html の divとtable の役割
-
divとpの使いわけ
-
ヘッダーとフッターだけ背景を...
-
min-heightとheightの違いについて
-
セクションをdivで囲むと見出し...
-
画面を縮小するとカラムが落ち...
-
ヘッダーを左右に二分割する方...
-
スペースを使わず文字位置を揃...
-
1時間30分を簡単に表したいで...
-
CSSで、contentsがfooterに重な...
-
h1に自分自身へのリンクを張...
-
divの中に外部のHTMLを埋め込む
-
hタグの右横に画像を表示
-
divを横に並べる方法
-
インラインフレームのページ内...
おすすめ情報
教えてもらって確認したら、
ソースhtmlと、画面に表示される記事の検証のhtmlが異なっていた。
確かに記事はソースから作られた製造物になっている。
selenium4+pythonで最も簡単なものを作ってみた
driver.find_elements(By.TAG_NAME, 'h3')
動作してh3タグでトップ画面の見出し39件取得できましたが、それ以外によけいな分類部分など50件近く。
そこで、bs4のsoupのように
a タグと 属性と属性値で制限することはできないのでしょうか?
可能なら <a data-testid="Heading" 利用できる。
solenium4のscraypingでは、yuccoさんの解説サイトが役に立った
https://note.com/yucco72/n/neef7e680786e#f0c0ba0 …
取得した範囲をさらに絞り込める。
find_element()の返りオブジェクトに対しfind_elements()が掛けられる。
main_content = driver.find_element(by= By.TAG_NAME, value= "main")
h3s = main_contents.find_element(by= By.TAG_NAME, value = "h3")
これで36件のトップ記事の見出しが取れました
先の補足でミス発見 正しいのはこちら
main_content = driver.find_element(by= By.TAG_NAME, value= "main")
h3s = main_content.find_elements(by= By.TAG_NAME, value = "h3")
絞込するobjectは、listはだめで、ひとつだけ。
絞り込んだ中から複数をlistに出すのはOK。
soleniumは、bs4よりかなり時間がかかる。
これなら、他のbs4で取れなかったサイトもできそう。