現在某サイトを利用してスクレイピングの勉強をしています。
少しは理解できたと思うのですが、
下記のHTMLコードから
<div class="aaa">
タグ内のテキスト(3件 - ooopppqqq、yyy、zzz)を抽出したい<span class="bbb">
タグ内のテキスト(α、β、θ)は抽出したくない- 1件目は一番難儀で
α
は不要、ooo
、aタグ内のテキストppp
、aタグ直後のqqq
を連結したooopppqqq
を取得したい - 2、3件目は
yyy
、zzz
を取得したい
といった場合のコードの書き方が全くわかりません(m_ m)
もしわかる方がいらっしゃればご教授いただきますようよろしくお願いいたします(m _m)
html
1<div class="list"> 2 <ol> 3 <li> 4 <div class="aaa"> 5 <span class="bbb">α</span> 6 ooo<a href="site_url">ppp</a>qqq 7 </div> 8 </li> 9 <li> 10 <div class="aaa"> 11 <span class="bbb">β</span> 12 yyy 13 </div> 14 </li> 15 <li> 16 <div class="aaa"> 17 <span class="bbb">θ</span> 18 zzz 19 </div> 20 </li> 21 </ol> 22</div>
動作環境
Ruby | 2.5.7 |
---|---|
Mechanize | 2.7.6 |
期待する動作
<div class="aaa">
タグ内のテキスト(3件 - ooopppqqq、yyy、zzz)を抽出したい<span class="bbb">
タグ内のテキスト(α、β、θ)は抽出したくない- 1件目は一番難儀で
α
は不要、ooo
、aタグ内のテキストppp
、aタグ直後のqqq
を連結したooopppqqq
を取得したい - 2、3件目は
yyy
、zzz
を取得したい
ruby
1# 現状だと下記のようにデータが取得されます 2#[ 3# "ooo", 4# "qqq", 5# "yyy", 6# "zzz" 7#] 8 9# 理想は下記のようにデータが取得されること 10#[ 11# "ooopppqqq", 12# "yyy", 13# "zzz" 14#]
コード
スクレイピングするHTML(整形)
- sample.html
html
1<div class="list"> 2 <ol> 3 <li> 4 <div class="aaa"> 5 <span class="bbb">α</span> 6 ooo<a href="site_url">ppp</a>qqq 7 </div> 8 </li> 9 <li> 10 <div class="aaa"> 11 <span class="bbb">β</span> 12 yyy 13 </div> 14 </li> 15 <li> 16 <div class="aaa"> 17 <span class="bbb">θ</span> 18 zzz 19 </div> 20 </li> 21 </ol> 22</div>
追記:修正したコード(Ruby)
ruby
1require 'mechanize' 2 3agent = Mechanize.new 4# sample.html のコードが含まれるurlから情報を取得 5page = agent.get(url) 6html_infos = page.search('.aaa') 7 8foo = page.xpath("//div[@class='aaa']//text()") 9bar = page.xpath("//div[@class='aaa']/span[@class="bbb"]//text()") 10extracted_datas = (foo - bar).map{|x| x.text.strip}.select{|x| x!=""} 11 12p extracted_datas 13 14# 現状だと下記のようにデータが取得されます 15#[ 16# "ooo", 17# "qqq", 18# "yyy", 19# "zzz" 20#] 21 22# 理想は下記のようにデータが取得されること 23#[ 24# "ooopppqqq", 25# "yyy", 26# "zzz" 27#]
現状のコード
ruby
1require 'mechanize' 2 3agent = Mechanize.new 4# sample.html のコードが含まれるurlから情報を取得 5page = agent.get(url) 6html_infos = page.search('.aaa') 7 8extracted_datas = [] 9html_infos.each do |ele| 10 extracted_datas << ele.inner_text 11end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/07 10:36 編集
2020/05/07 10:39
2020/05/07 11:41 編集
2020/05/07 21:51