前提・実現したいこと(すべて解決するまで更新し続けます。)
**【URL】【画像】【商品名】【発売日】【値段】**を抜き出して出力する。(CSV、テキストなど)
その後、tkinterでExcelのinputboxのようなものを作成する。
HTML
1▾ 2 ▾<div id="Main"> 3 ▾<a href="URL1" class"s d a"> 4 ▾<div class="img"> 5 <img src="https://...jpg?" Srcset="https://...jpg? x1, https://...jpg? x2"> 6 </div> 7 ▾<div class="one"> 8 ▾<div class="two"> 9 <span class="title">商品名</span> 10 </div> 11 <div class="three">発売日</div> 12 ▶<div class=""></div> 13 ▾<div class="four"> 14 ▾<div class="five"> 15 ▾<span style="color: #888888;"> 16 <strike>¥1,520</strike> 17 </span> 18 <br> 19 "¥1,140 " 20 </div> 21 </div> 22 </div> 23 <div style="clear: left;"></div> 24 </a> 25 ▶<a href="URL2" class"s d a">…</a> 26 ▶<a href="URL3" class"s d a">…</a> 27 ▶<a href="URL4" class"s d a">…</a> 28 </div> 29▶
※必要でないような部分は記述していません。classはそのまま表示するわけにもいきませんので英数字を入れています。出来ない部分は無理に出力も必要ありません。
(<a href>内のclassは一部商品を除き同一でした。)
もし上記だけでは情報不足という事であれば、その前後も追記致します。
<a>タグの中に欲しい情報が全て収まっており、ブラウザ上は横並びで一行になっています。
<a>タグ1つが1行で、その下URL2,3,4…と下に続いています。その全てをページを変えて抽出が目標となっております。
値段の部分では割引されている場合改行が入ります。VBAで試した際にそのままCSV出力すると改行された為、「vbCrLf」で削除し解決しました。
一度下記質問内で同じページをVBAスクレイピングしております。
https://teratail.com/questions/237676
解決済み(一部)2/15更新
※実際のサイトのclass名等を一部変更し記載しています。
【URL】【画像】【商品名】【発売日】【値段】の抜き出しは一応出来ております。(問題あり)
Python
1import requests 2import urllib.request 3from bs4 import BeautifulSoup 4 5r = requests.get("https://store.com/search/?term=japanese") 6 7soup = BeautifulSoup(r.content, "html.parser") 8 9main = soup.find('div', id='search_resultsRows') 10m2a = main.find_all('a', class_='search_result_row') 11
Python
1a2trph = [] 2for item in m2a: 3 a2t = item.select_one("[class='title']").text 4 a2r = item.select_one('div.search_released').text 5 a2p = item.select_one('div.search_price').text 6 a2h = item.get('href') 7 a2trph.append(a2t) 8 a2trph.append(a2r) 9 a2trph.append(a2p) 10 a2trph.append(a2h) 11print(a2trph) 12 13with open("test.txt", "w", encoding="utf-8") as f: 14 f.write(str(a2trph))
【画像】保存は終了し、現状困ったところはありません。問題があればその時にコードを記載致します。
現状の問題 2/15更新
上部「解決済み」2つ目のコードで下記の様に出力されます。(一部変更)
一行での記載で見づらいと思いますが実際に表示されている状態の方が良いと思いこの様に表現しています。
※コード内【値段】の部分で問題が生じております。
csvやテキストファイルに出力する際に、\nや**\r**、空白部分が邪魔になる事と存じます。
所感ですが、HTMLのdivタグなどの部分で\nや\rが出力され、値段の部分に空白が入れられていると思われます。
** → 何故かstripで解決** 理由が知りたい・・・
※すべてのコードで問題が生じております。
- 各項目「'」で囲まれている。例:下記コード参照
純粋にテキストだけ欲しいのですが、何故「'」に囲まれているのでしょうか。
- 又、Excelにした際に【発売日】に「,」が入っており区切り文字として使用できません。どういった解決策がありますでしょうか。
['Sampletitle1 (Japanese Ver.)', '27 Nov, 2019', 'Free To Play', 'https://store.com/app/1175730/Japanese_Ver/?snr=1_7_7_151_150_1', "Sampletitle2 (Japanese version)", '10 Dec, 2014', '¥ 10,162', 'https://store.com/app/288390/Japanese_version/?snr=1_7_7_151_150_1', 'Sampletitle3', '22 Aug, 2019', '¥ 1,320¥ 1,056', 'https://store.com/app/662960/?snr=1_7_7_151_150_1', ...以下ヒット数同文]
この問題をどの様に解決すればよいかご教示頂ければ幸いです。コードを一から作り直しでも構いません。
補足情報(FW/ツールのバージョンなど)
Python3.8.1 64-bit
当方のPython知識は、
・独学プログラマー Python言語の基本から仕事のやり方まで
・Excel×Python最速仕事術
こちらの2冊を読んだだけの知識で御座います。
回答1件
あなたの回答
tips
プレビュー