質問編集履歴

6

修正

2020/02/18 04:33

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -110,8 +110,6 @@
110
110
 
111
111
  soup = BeautifulSoup(r.content, "html.parser")
112
112
 
113
- # [tag.extract() for tag in soup(string='n')] #改行削除らしい → 削除されず
114
-
115
113
 
116
114
 
117
115
  main = soup.find('div', id='search_resultsRows')
@@ -126,21 +124,19 @@
126
124
 
127
125
  ```Python
128
126
 
129
- #---各種情報取得---#
130
-
131
- a2trph = [] #各項目のリスト
127
+ a2trph = []
132
128
 
133
129
  for item in m2a:
134
130
 
135
- a2t = item.select_one("[class='title']").text #title取得
131
+ a2t = item.select_one("[class='title']").text
136
-
132
+
137
- a2r = item.select_one('div.search_released').text #発売日取得
133
+ a2r = item.select_one('div.search_released').text
138
-
134
+
139
- a2p = item.select_one('div.search_price').text.strip() #値段取得
135
+ a2p = item.select_one('div.search_price').text
140
-
136
+
141
- a2h = item.get('href') #URL取得
137
+ a2h = item.get('href')
142
-
138
+
143
- a2trph.append(a2t) #新しい要素をリストの最後に追加
139
+ a2trph.append(a2t)
144
140
 
145
141
  a2trph.append(a2r)
146
142
 
@@ -152,11 +148,9 @@
152
148
 
153
149
 
154
150
 
155
- テキスト出力
156
-
157
- with open("test.txt", "w", encoding="utf-8") as f: #with open([ファイルパス],[モード]) as [変数]
151
+ with open("test.txt", "w", encoding="utf-8") as f:
158
-
152
+
159
- f.write(str(a2trph)) #soup.find(タグ名, 属性=値)
153
+ f.write(str(a2trph))
160
154
 
161
155
  ```
162
156
 
@@ -202,18 +196,6 @@
202
196
 
203
197
 
204
198
 
205
- 【他の問題が解決後取り組みたい課題】
206
-
207
- - VBAinputboxのようなものがPythonにはない→tkinterでユーザーフォームのようなものを1から作成しないといけない
208
-
209
- →**保留**
210
-
211
-
212
-
213
- - seleniumでサイトの操作が出来る事がわかったものの、ページ移動先のURL取得方法がわからない
214
-
215
- →**今回のページでは必要ないと思われる**
216
-
217
199
 
218
200
 
219
201
  ### 補足情報(FW/ツールのバージョンなど)

5

問題更新

2020/02/18 04:32

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- ### 解決済み(一部)2/14更新
91
+ ### 解決済み(一部)2/15更新
92
92
 
93
93
  ※実際のサイトのclass名等を一部変更し記載しています。
94
94
 
@@ -136,7 +136,7 @@
136
136
 
137
137
  a2r = item.select_one('div.search_released').text #発売日取得
138
138
 
139
- a2p = item.select_one('div.search_price').text #値段取得
139
+ a2p = item.select_one('div.search_price').text.strip() #値段取得
140
140
 
141
141
  a2h = item.get('href') #URL取得
142
142
 
@@ -148,8 +148,6 @@
148
148
 
149
149
  a2trph.append(a2h)
150
150
 
151
- #a2trp.append(f'{a2t}:{a2r}:{a2p}')
152
-
153
151
  print(a2trph)
154
152
 
155
153
 
@@ -166,7 +164,7 @@
166
164
 
167
165
 
168
166
 
169
- ### 現状の問題 2/14更新
167
+ ### 現状の問題 2/15更新
170
168
 
171
169
  上部「解決済み」2つ目のコードで下記の様に出力されます。(一部変更)
172
170
 
@@ -174,23 +172,35 @@
174
172
 
175
173
 
176
174
 
175
+ **※コード内【値段】の部分で問題が生じております。**
176
+
177
177
  csvやテキストファイルに出力する際に、**\n**や**\r**、**空白**部分が邪魔になる事と存じます。
178
178
 
179
179
  所感ですが、HTMLのdivタグなどの部分で\nや\rが出力され、値段の部分に空白が入れられていると思われます。
180
180
 
181
-
182
-
183
- **※コード内【値段】の部分で問題が生じております。**
184
-
185
-
181
+ ** → 何故かstripで解決** 理由が知りたい・・・
182
+
183
+
184
+
185
+ **※すべてのコードで問題が生じております。**
186
+
187
+ - 各項目「'」で囲まれている。例:下記コード参照
188
+
189
+ 純粋にテキストだけ欲しいのですが、何故「'」に囲まれているのでしょうか。
190
+
191
+ - 又、Excelにした際に【発売日】に「,」が入っており区切り文字として使用できません。どういった解決策がありますでしょうか。
192
+
193
+
194
+
195
+ ```
196
+
197
+ ['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', ...以下ヒット数同文]
198
+
199
+ ```
186
200
 
187
201
  この問題をどの様に解決すればよいかご教示頂ければ幸いです。コードを一から作り直しでも構いません。
188
202
 
189
- ```
190
-
191
- ['Sampletitle1 (Japanese Ver.)', '27 Nov, 2019', '\r\n Free To Play ', 'https://store.com/app/1175730/Japanese_Ver/?snr=1_7_7_151_150_1', "Sampletitle2 (Japanese version)", '10 Dec, 2014', '\r\n ¥ 10,162 ', 'https://store.com/app/288390/Japanese_version/?snr=1_7_7_151_150_1', 'Sampletitle3', '22 Aug, 2019', '\n¥ 1,320¥ 1,056 ', 'https://store.com/app/662960/?snr=1_7_7_151_150_1', ...以下ヒット数同文]
192
-
193
- ```
203
+
194
204
 
195
205
  【他の問題が解決後取り組みたい課題】
196
206
 

4

2/14更新

2020/02/15 13:54

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -88,7 +88,7 @@
88
88
 
89
89
 
90
90
 
91
- ### 解決済み(一部)2/9更新
91
+ ### 解決済み(一部)2/14更新
92
92
 
93
93
  ※実際のサイトのclass名等を一部変更し記載しています。
94
94
 
@@ -130,17 +130,15 @@
130
130
 
131
131
  a2trph = [] #各項目のリスト
132
132
 
133
- i = 0
134
-
135
133
  for item in m2a:
136
134
 
137
- a2t = m2a[i].select('div.ellipsis')[0].text #title取得
135
+ a2t = item.select_one("[class='title']").text #title取得
138
-
136
+
139
- a2r = m2a[i].select('div.search_released')[0].text #発売日取得
137
+ a2r = item.select_one('div.search_released').text #発売日取得
140
-
138
+
141
- a2p = m2a[i].select('div.search_price')[0].text #値段取得
139
+ a2p = item.select_one('div.search_price').text #値段取得
142
-
140
+
143
- a2h = m2a[i].get('href') #URL取得
141
+ a2h = item.get('href') #URL取得
144
142
 
145
143
  a2trph.append(a2t) #新しい要素をリストの最後に追加
146
144
 
@@ -150,8 +148,6 @@
150
148
 
151
149
  a2trph.append(a2h)
152
150
 
153
- i += 1
154
-
155
151
  #a2trp.append(f'{a2t}:{a2r}:{a2p}')
156
152
 
157
153
  print(a2trph)
@@ -170,7 +166,7 @@
170
166
 
171
167
 
172
168
 
173
- ### 現状の問題 2/9更新
169
+ ### 現状の問題 2/14更新
174
170
 
175
171
  上部「解決済み」2つ目のコードで下記の様に出力されます。(一部変更)
176
172
 
@@ -184,11 +180,15 @@
184
180
 
185
181
 
186
182
 
183
+ **※コード内【値段】の部分で問題が生じております。**
184
+
185
+
186
+
187
187
  この問題をどの様に解決すればよいかご教示頂ければ幸いです。コードを一から作り直しでも構いません。
188
188
 
189
189
  ```
190
190
 
191
- ['\nSampletitle1 (Japanese Ver.)\n\n \n', '27 Nov, 2019', '\r\n Free To Play ', 'https://store.com/app/1175730/Japanese_Ver/?snr=1_7_7_151_150_1', "\nSampletitle2 (Japanese version)\n\n \n", '10 Dec, 2014', '\r\n ¥ 10,162 ', 'https://store.com/app/288390/Japanese_version/?snr=1_7_7_151_150_1', '\nSampletitle3~\n\n \n', '22 Aug, 2019', '\n¥ 1,320¥ 1,056 ', 'https://store.com/app/662960/?snr=1_7_7_151_150_1', ...以下ヒット数同文]
191
+ ['Sampletitle1 (Japanese Ver.)', '27 Nov, 2019', '\r\n Free To Play ', 'https://store.com/app/1175730/Japanese_Ver/?snr=1_7_7_151_150_1', "Sampletitle2 (Japanese version)", '10 Dec, 2014', '\r\n ¥ 10,162 ', 'https://store.com/app/288390/Japanese_version/?snr=1_7_7_151_150_1', 'Sampletitle3', '22 Aug, 2019', '\n¥ 1,320¥ 1,056 ', 'https://store.com/app/662960/?snr=1_7_7_151_150_1', ...以下ヒット数同文]
192
192
 
193
193
  ```
194
194
 

3

更新

2020/02/14 10:42

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -178,7 +178,7 @@
178
178
 
179
179
 
180
180
 
181
- csvやテキストファイルに出力する際に、\nや\r、空白部分が邪魔になる事と存じます。
181
+ csvやテキストファイルに出力する際に、**\n****\r****空白**部分が邪魔になる事と存じます。
182
182
 
183
183
  所感ですが、HTMLのdivタグなどの部分で\nや\rが出力され、値段の部分に空白が入れられていると思われます。
184
184
 

2

全て更新

2020/02/09 11:27

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,8 @@
1
- ### 前提・実現したいこと
1
+ ### 前提・実現したいこと(すべて解決するまで更新し続けます。)
2
-
2
+
3
- 【URL】【画像】【商品名】【発売日】【値段】を抜き出して出力する。(CSV、テキストなど)
3
+ **【URL】【画像】【商品名】【発売日】【値段】**を抜き出して出力する。(CSV、テキストなど)
4
+
5
+ その後、tkinterでExcelのinputboxのようなものを作成する。
4
6
 
5
7
  ```HTML
6
8
 
@@ -80,117 +82,117 @@
80
82
 
81
83
 
82
84
 
85
+ 一度下記質問内で同じページをVBAスクレイピングしております。
86
+
87
+ https://teratail.com/questions/237676
88
+
89
+
90
+
83
- ### 試したこと
91
+ ### 解決済み(一部)2/9更新
92
+
84
-
93
+ ※実際のサイトのclass名等を一部変更し記載しています。
94
+
85
- 下記コードは、いくつかサイトを参考にして試してはコメントや書き直しを繰り返しております。抜き出しているHTML部分試した内容で別々になっており、統されておりません
95
+ 【URL】【画像】【商品名】【発売日】【値段】の抜き出しは一応出来ておりま(問題あり)
86
96
 
87
97
  ```Python
88
98
 
89
- import requests #Webページを取得
90
-
91
- import tkinter
92
-
93
- from bs4 import BeautifulSoup #HTMLを抽出
94
-
95
- from selenium import webdriver #ブラウザ操作
96
-
97
- from selenium.webdriver.common.keys import Keys
98
-
99
- # from urllib import request
100
-
101
- # from lxml import html
102
-
103
- import time
104
-
105
-
106
-
107
- # root = tkinter.Tk() # Tkクラス生成
108
-
109
- # root.geometry('300x200') # 画面サイズ
110
-
111
- # root.title('テキストボックス') # 画面タイトル
112
-
113
- # lbl = tkinter.Label(text='数値') # ラベル
114
-
115
- # lbl.place(x=30, y=70)
116
-
117
- # txt = tkinter.Entry(width=20) # テキストボックス
118
-
119
- # txt.place(x=90, y=70)
120
-
121
- # txt.get() # テキストボックスの文字を取得
122
-
123
- # root.mainloop() # 画面をそのまま表示
124
-
125
-
126
-
127
- keyword = input("検索したいワードを入力してください。")
128
-
129
- keyword = str(keyword)
130
-
131
-
132
-
133
- driver = webdriver.Chrome(executable_path=r'C:/Python/selenium/chromedriver.exe') # Chromeを起動
134
-
135
- driver.get('https://s.com/stats/') # サイトにアクセス
136
-
137
-
138
-
139
- #element = driver.find_element_by_name("q"); # 検索ボックスの要素を取得
140
-
141
- element = driver.find_element_by_id("store_nav_search_term"); # 検索ボックスの要素を取得
142
-
143
- element.send_keys(keyword) # キーワード入力
144
-
145
- element.send_keys(Keys.ENTER)
146
-
147
-
148
-
149
- time.sleep(5) # 5秒待つ
150
-
151
-
152
-
153
- print(requests.get(driver).url)
154
-
155
-
156
-
157
- #title = driver.find_element_by_class_name("title")
158
-
159
- #soup = BeautifulSoup(title, "html.parser")
160
-
161
-
162
-
163
- #driver.find_element_by_class_name("gNO89b").click() # classで指定
164
-
165
- #driver.find_element_by_id("id").click() # idでの指定
166
-
167
- #driver.find_element_by_xpath("XPATH").click() # xpathでの指定
168
-
169
-
170
-
171
- #time.sleep(5)
172
-
173
-
174
-
175
- #element = driver.find_element_by_name("q"); # 検索ボックスの要素を取得
176
-
177
- #element.clear() # キワードを消す
178
-
179
-
180
-
181
- #time.sleep(5)
182
-
183
- ```
184
-
185
- 一度下記質内で同じページをVBAスクレイピングしておます。
186
-
187
- https://teratail.com/questions/237676
188
-
189
-
190
-
191
- スクレイピングの流れは1度経験しているのですが、Pythonのどのコードを使用すれば同じことが出来るのかが理解出来ておりません。
192
-
193
-
99
+ import requests
100
+
101
+ import urllib.request
102
+
103
+ from bs4 import BeautifulSoup
104
+
105
+
106
+
107
+ r = requests.get("https://store.com/search/?term=japanese")
108
+
109
+
110
+
111
+ soup = BeautifulSoup(r.content, "html.parser")
112
+
113
+ # [tag.extract() for tag in soup(string='n')] #改行削除らしい → 削除されず
114
+
115
+
116
+
117
+ main = soup.find('div', id='search_resultsRows')
118
+
119
+ m2a = main.find_all('a', class_='search_result_row')
120
+
121
+
122
+
123
+ ```
124
+
125
+
126
+
127
+ ```Python
128
+
129
+ #---各種情報取得---#
130
+
131
+ a2trph = [] #各項目のリスト
132
+
133
+ i = 0
134
+
135
+ for item in m2a:
136
+
137
+ a2t = m2a[i].select('div.ellipsis')[0].text #title取得
138
+
139
+ a2r = m2a[i].select('div.search_released')[0].text #発売日取得
140
+
141
+ a2p = m2a[i].select('div.search_price')[0].text #値段取得
142
+
143
+ a2h = m2a[i].get('href') #URL取得
144
+
145
+ a2trph.append(a2t) #新しい要素をリスの最後追加
146
+
147
+ a2trph.append(a2r)
148
+
149
+ a2trph.append(a2p)
150
+
151
+ a2trph.append(a2h)
152
+
153
+ i += 1
154
+
155
+ #a2trp.append(f'{a2t}:{a2r}:{a2p}')
156
+
157
+ print(a2trph)
158
+
159
+
160
+
161
+ テキスト出力
162
+
163
+ with open("test.txt", "w", encoding="utf-8") as f: #with open([ファイルパス],[モード]) as [変数]
164
+
165
+ f.write(str(a2trph)) #soup.find(タグ名, 属性=値)
166
+
167
+ ```
168
+
169
+ 【画像】保存は終了し、現状困ったところはありません。問題があればその時にコードを記載致します。
170
+
171
+
172
+
173
+ ### 現状問題 2/9更新
174
+
175
+ 上部「解決済み」2つ目のコード下記様に出力されます。(一部変更)
176
+
177
+ 一行での記載で見づらいと思いますが実際に表示されている状態の方が良いと思いこの様に表現しています。
178
+
179
+
180
+
181
+ csvやテキストファイルに出力する際に、\nや\r、空白部分が邪魔になる事と存じます。
182
+
183
+ 所感ですが、HTMLのdivタグなどの部分で\nや\rが出力され、値段の部分に空白が入れられていると思われます。
184
+
185
+
186
+
187
+ この問題をどの様に解決すればよいかご教示頂ければ幸いです。コードを一から作り直しでも構いません。
188
+
189
+ ```
190
+
191
+ ['\nSampletitle1 (Japanese Ver.)\n\n \n', '27 Nov, 2019', '\r\n Free To Play ', 'https://store.com/app/1175730/Japanese_Ver/?snr=1_7_7_151_150_1', "\nSampletitle2 (Japanese version)\n\n \n", '10 Dec, 2014', '\r\n ¥ 10,162 ', 'https://store.com/app/288390/Japanese_version/?snr=1_7_7_151_150_1', '\nSampletitle3~\n\n \n', '22 Aug, 2019', '\n¥ 1,320¥ 1,056 ', 'https://store.com/app/662960/?snr=1_7_7_151_150_1', ...以下ヒット数同文]
192
+
193
+ ```
194
+
195
+ 【他の題が解決後取組みたい課題】
194
196
 
195
197
  - VBAinputboxのようなものがPythonにはない→tkinterでユーザーフォームのようなものを1から作成しないといけない
196
198
 
@@ -200,21 +202,15 @@
200
202
 
201
203
  - seleniumでサイトの操作が出来る事がわかったものの、ページ移動先のURL取得方法がわからない
202
204
 
203
- →**保留**
204
-
205
-
206
-
207
- - おそらく当サイトはselenium操作が必要な構成はしていないのでは?
208
-
209
- →[requests][BeautifulSoup]のみでページ移動や抽出方法がわからない
210
-
211
-
212
-
213
- 丸投げにっている事は重々理解しています。
205
+ →**今回のページでは必要ないと思われ**
206
+
207
+
208
+
214
-
209
+ ### 補足情報(FW/ツールのバージョンなど)
210
+
211
+ Python3.8.1 64-bit
212
+
215
- 非常に短いコドで確実に動いたものをclassnameやid等変更し試しても動かず、動いたサイトが[ul]でリストだからこのコードが動いたのか・・・?と、ダメだった事実だけが残り、原因も解決方法もわからず何も進歩がなく当サイトを利用させて頂きました。
213
+ ![イメジ説明](898d1df83cafdabd77af2f40864641ca.jpeg)
216
-
217
-
218
214
 
219
215
  当方のPython知識は、
220
216
 
@@ -223,11 +219,3 @@
223
219
  ・Excel×Python最速仕事術
224
220
 
225
221
  こちらの2冊を読んだだけの知識で御座います。
226
-
227
-
228
-
229
- ### 補足情報(FW/ツールのバージョンなど)
230
-
231
- Python3.8.1 64-bit
232
-
233
- ![イメージ説明](898d1df83cafdabd77af2f40864641ca.jpeg)

1

試したこと下部、当方のPython知識

2020/02/09 05:47

投稿

LBciel.
LBciel.

スコア18

test CHANGED
File without changes
test CHANGED
@@ -216,6 +216,16 @@
216
216
 
217
217
 
218
218
 
219
+ 当方のPython知識は、
220
+
221
+ ・独学プログラマー Python言語の基本から仕事のやり方まで
222
+
223
+ ・Excel×Python最速仕事術
224
+
225
+ こちらの2冊を読んだだけの知識で御座います。
226
+
227
+
228
+
219
229
  ### 補足情報(FW/ツールのバージョンなど)
220
230
 
221
231
  Python3.8.1 64-bit