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

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

新規登録して質問してみよう
ただいま回答率
85.35%
スクレイピング

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

Beautiful Soup

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

2回答

1666閲覧

python スクレイピングの要素指定について

dice.program

総合スコア1

スクレイピング

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

Beautiful Soup

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

Python

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

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

2クリップ

投稿2020/06/14 15:05

編集2020/06/15 05:18

前提・実現したいこと(再度、訂正させて頂きました。)

初めまして
pythonのrequestsとseleniumとBeautifulSoupを使って
下記写真の右側矢印付近にあるix:nonnumericタグから左側の矢印に該当する氏名<塚田 耕司>を取得しようと試みたのですが、
何も要素を取得できませんでした。

ちゃんと要素を受け取るためにはどのようにcssセレクタを指定すればよろしいでしょうか?

イメージ説明

こちらがターミナルの結果画像になります。

イメージ説明

該当のソースコード

Python3.8

from bs4 import BeautifulSoup import requests from selenium import webdriver import time URL = "https://disclosure.edinet-fsa.go.jp/E01EW/BLMainController.jsp?uji.verb=W00Z1010initialize&uji.bean=ek.bean.EKW00Z1010Bean&PID=W1E63031&TID=W00Z1010&SESSIONKEY=1592144727926&stype=0&dcdSelect=35001&hcdSelect=&ycdSelect=&tsbSdt=&syoruiKanriNo=S100GG5L&keyword1=7203&keyword2=&keyword3=&keyword4=&keyword5=&lgKbn=2&pkbn=0&skbn=1&dskb=&askb=&dflg=0&iflg=0&preId=1&chr=7203&hbn=true&spf5=2&otd=35001&hcd=&sec=&scc=&shb=&snm=&spf1=1&spf2=1&iec=&icc=&inm=&spf3=1&fdc=&fnm=&spf4=1&cal=1&era=H&yer=&mon=&psr=1&pid=4&row=100&idx=0&str=&kbn=1&flg=" page = requests.get(URL) driver = webdriver.Chrome() driver.get(URL) time.sleep(3) soup = BeautifulSoup(driver.page_source, "html.parser") el = soup.select("div#diffBlock00_4") print(el) time.sleep(5)

試したこと

最初はrequestsでサイトを取得しBeatifulSoupで解析を行ったのですが、解析結果に
対応していないブラウザです
と表示されたのでseleniumでブラウザを起動し解析を試みました。

こちらのサイトを参考に様々なcssセレクタを試しましたが結果は同じでした。
https://gammasoft.jp/support/css-selector-for-python-web-scraping/

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

IDEはvisual stdio code
webブラウザーはChromeDriverでちゃんとバージョンが合ったものを使用しています。

当方は、htmlはprogateを一周、機械学習や作業の自動化に惹かれpythonを始めたばかりで拙い文章だとは思いますが、ご教授の方よろしくお願い致します。

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

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

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

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

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

hoshi-takanori

2020/06/14 22:58

requests を使う場合、requests は HTML を単なる文字列として返すので、BeatifulSoup を使って HTML を解析する必要があるわけですが、ChromeDriver は Chrome を自動操作するためのツールで、Chrome はブラウザなので当然自分で HTML を解析して表示しているわけで、ChromeDriver はそこから情報をもらえるため BeatifulSoup は不要になります。(というか、むしろブラウザがやってる HTML の解析をブラウザ抜きでやるためのライブラリが BeatifulSoup である、と言ったほうがいいかも。)
dice.program

2020/06/15 05:28

ご回答ありがとうございます! ChromeDriverにより解析済みなのにさらにBeatifulSoupで解析するという二度手間だった訳ですね、、今後ないようにします! BeautifulSoupの存在意義も簡潔に理解できました! ありがとうございました!!
guest

回答2

0

ベストアンサー

requestsもbsも不要です。

python

1from selenium import webdriver 2from time import sleep 3 4URL = "https://di" # 略 5driver = webdriver.Chrome() 6driver.get(URL) 7 8sleep(3) 9 10driver.switch_to.frame(driver.find_element_by_name('viewFrame')) 11driver.switch_to.frame(driver.find_element_by_name('mainFrame')) 12el = driver.find_element_by_xpath('//td[contains(text(), "【氏名又は名称】")]/following-sibling::td[1]').text 13 14print(el)

投稿2020/06/14 17:10

shirai

総合スコア1290

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

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

dice.program

2020/06/15 05:21

ありがとうございます!無事取得できました!! 下の方の回答と合わせるとフレーム要素を取得しそちらに遷移してからxpathで要素指定する という考えになるんですね! 他のサイトでも同じ形が出たら試してみます。 お時間割いて頂きありがとうございました!
guest

0

HTMLのどの要素を取りたいのか不明なので、
要素の指定が間違っていると言うことでしょうから、HTMLをよく見直しましょうとしか言いようがないです。

#追記
フレームを使ったページのようなのに、フレームの中を見ていないからですね。

投稿2020/06/14 15:35

編集2020/06/14 16:17
otn

総合スコア85901

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

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

dice.program

2020/06/14 16:41

ご指摘頂きありがとうございます! 質問内容を訂正させて頂きました。お手すきの際にご確認頂ければ幸いです。 フレームのソースを表示でご指摘頂いた問題への解決に繋がりますでしょうか?重ね重ね申し訳ございません。
otn

2020/06/14 23:31

> 質問内容を訂正させて頂きました 何をどう訂正したのでしょうか? 画像は見づらいので、テキストで書いてください。 > フレームのソースを表示でご指摘頂いた問題への解決に繋がりますでしょうか?重ね重ね申し訳ございません。 フレームの中は別のHTMLソースなので、別ページに遷移するようなイメージです。 ・requiestsを使うなら、フレームのURLを取得してそのページを取得 ・seleniumを使うなら、driver.switch_to_frame(フレーム要素)
dice.program

2020/06/15 05:24

重ねてのご指摘ありがとうございます!再度訂正させて頂きました! ご回答頂いた内容でseleniumの動きがイメージできました。 遷移("するような"になるんでしょうか?)する前に要素を取得しようとしていたため何も返ってこず、 目的のフレームに遷移してからxpathを指定するという形で無事取得できました。 重ね重ねのご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問