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

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

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

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

Beautiful Soup

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

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

894閲覧

CSSセレクターの書き換え

tatsuya5.22

総合スコア8

スクレイピング

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

Beautiful Soup

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

Python

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

Scrapy

Scrapyは、Pythonで開発されたオープンソースソフトウェアです。スクレイピングという、Webサービスから必要な情報を取り出したり自動操作をしたりする技術を使うものです。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2020/10/02 09:09

編集2020/10/02 09:10

動的サイトのスクレイピングをしているのですが取得したい情報のクラス名がページが変わるごとに変わってしまうためCSSセレクターを使いスクレイピングをしようかと思っております。

しかし、CSSセレクターを取得したはいいものの、そのCSSセレクターを全てのクラスに反映させ情報を取得するために自分で書き換えをしようとしているのですがどこをどう書き換えていいかわからず困っているのでお力を貸していただきたいです。

使用したコードが下記のコードです。

Python

1soup = BeautifulSoup(driver.page_source,"html.parser") 2menu_selector = "#wrapper > main > div:nth-child(4) > ul > li" 3menu_selector = "ul > li > div" 4menu = soup.select(menu_selector) 5print(menu)

上記のコードで取得した値の一部が以下になります。

HTML

1[<div class="au cn n3 b5" tabindex="0"><div class="b0 c6 n4 af aj n5 n6"><div class="au cn 2av"><div><h4 class="b8 b9 by as au aw"><div class="ic id n8 aj">いくら丼(並盛)Salmon Caviar 3Rice Bowl</div></h4><div><div class="bw bx by gl">天然大粒いくらをたっぷり堪能できる一品です。並盛の 43倍のいくらが乗った、"豪快盛"も登場!いくらを口いっぱいに頬張れば、プチプチとした食感を贅沢にお楽しみいただけ 5ます。</div></div><div class="na gn au"><div class="b8 b9 by as">¥1,100</div></div></div> 6<div class="m7 nb cp"><img alt="いくら丼(並盛)Salmon Caviar Rice Bowl" aria-hidden="true" 7class="d4 m7 nb h9 nd ne cp" src="https://d1ralsognjng37.cloudfront.net/958d0bd2-191a-4b8c- 8a434-10c651e3567d.jpeg"/></div></div></div></div>, <div class="au cn n3 b5" tabindex="0"> 9<div class="b0 c6 n4 af aj n5 n6"><div class="au cn av"><div><h4 class="b8 b9 by as au aw"> 10<div class="ic id n8 aj">いくら丼(大盛)Salmon Caviar Rice Bowl(L)</div></h4><div class="c2 11ic ie id aj n9"><div class="bw bx by gl">天然大粒いくらをたっぷり堪能できる一品です。並盛の3倍のいく 12らが乗った、"豪快盛"も登場!いくらを口いっぱいに頬張れば、プチプチとした食感を贅沢にお楽しみいただけます。 13</div></div><div class="na gn au"><div class="b8 b9 by as">¥1,450</div></div></div><div 14class="m7 nb cp"><img alt="いくら丼(大盛)Salmon Caviar Rice Bowl(L)" aria-hidden="true" 15class="d4 m7 nb h9 nd ne cp" src="https://d1ralsognjng37.cloudfront.net/888d9b88-933b-4484- 169746-80aacfe1c905.jpeg"/></div></div></div></div>, <div class="au cn n3 b5" tabindex="0"> 17<div class="b0 c6 n4 af aj n5 n6"><div class="au cn av"><div class="au cn cq n7"><h4 18class="b8 b9 by as au aw"><div class="ic id n8 aj">いくら丼(豪快盛)Salmon Caviar Rice Bowl 19(XL)</div></h4><div class="c2 ic ie id aj n9"><div class="bw bx by gl">天然大粒いくらをたっぷ 20り堪能できる一品です。並盛の3倍のいくらが乗った、"豪快盛"も登場!いくらを口いっぱいに頬張れば、プチプチとした 21食感を贅沢にお楽しみいただけます。</div></div><div class="na gn au"><div class="b8 b9 by 22as">¥2,600</div></div></div><div class="m7 nb cp"><img alt="いくら丼(豪快盛)Salmon Caviar 23Rice Bowl(XL)" aria-hidden="true" class="d4 m7 nb h9 nd ne cp" 24src="https://d1ralsognjng37.cloudfront.net/4bb9760e-e53e-4036-b8a9-c88e33ee7798.jpeg"/> 25</div></div></div></div>,

今スクレイピングしたい値は<div class="bw bx by gl">の値です。このクラスの値を取得するためにはmenu_selector = "ul > li > div"をどのように書き換えたらいいでしょうか?

よろしくお願いします。

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

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

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

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

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

Lhankor_Mhy

2020/10/02 09:56

uber eats ですか? 普通に div.bw.bx.by.gl ではダメなのですか?
tatsuya5.22

2020/10/03 08:09

ubereatsです。クラス名でも取れないことはないのですがページが変わるたびにdiv.bw.bx.by.glのクラス名が変わってしまうためCSSセレクターで情報をスクレイピング しようと考えております。
guest

回答2

0

ベストアンサー

XPathなら

"//h4/../div[1]/div"

でしょうか?

Python

1import lxml.html 2 3~~ 略~~ 4dom = lxml.html.fromstring(driver.page_source) 5lists = dom.xpath("//h4/../div[1]/div") 6 7for menu in lists: 8 print(menu.text) 9

これで 取得できるなら
.parent を使えばよい?

Python

1for h4 in soup.find_all('h4'): 2 menu = h4.parent.select_one("div > div").text 3 print(menu)

投稿2020/10/02 10:47

編集2020/10/02 19:41
Reach

総合スコア733

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

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

tatsuya5.22

2020/10/03 13:47

.parentを使った方法を全く思いつきませんでした。無事にスクレイピングできました。お力添えありがとうございました。
guest

0

例えば、店舗ページ内の品情報だけを取得したいという事であれば
以下で商品情報だけの要素が抽出出来ると思います。

python

1li = soup.find_all('li') 2item_list = [] 3for content in li: 4 if content.find('h2'): # リスト内に<h2>タグが含まれているか判定 5 pass 6 else: 7 item_list.append(content) 8 print(content.text, end='\n'+'='*20+'\n')

投稿2020/10/02 10:15

nto

総合スコア1438

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問