質問編集履歴
4
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
3
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
2
test
CHANGED
File without changes
|
test
CHANGED
File without changes
|
1
test
CHANGED
File without changes
|
test
CHANGED
@@ -2,19 +2,11 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
プログラミング初心者です。対象ページからスクレイピングし、エクセルに各行追加していくというプログラムを作ろうとしています。
|
6
6
|
|
7
|
+
皆さんお忙しい中、申し訳ございません。
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
よろしくお願いします。
|
10
|
-
|
11
|
-
書籍にはアマゾンサイトかにアクセスし、自分の気になる商品のURLをコピーしテキストBOXに張り付けるとエクセルに出力し、商品名、価格、URLなどが書かれる。というコードです。
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
今回僕がやりたいことは、セルを指定してとりあえず価格だけを抽出したいと思い自分なりに書いてみました。
|
16
|
-
|
17
|
-
価格は抽出できたものの、例えばG2セルに書き込んだら次に新しいURLが入力されたらG3セルに書き出すという風になるのが理想です。
|
18
10
|
|
19
11
|
|
20
12
|
|
@@ -24,11 +16,57 @@
|
|
24
16
|
|
25
17
|
|
26
18
|
|
19
|
+
|
20
|
+
|
21
|
+
早速ですが私が想定している作りたいものは...プログラムを実行→ウィンドウが出る→ミスミサイトの商品ページのURLをコピペ→URL取込用ウィンドウに貼り付け&取込ボタンを押して取り込む→エクセルの指定のセルに値を書き込み。ウィンドウに違う商品ページのURLを続けて貼り付け&取り込むと既存に書き込みしたセルの真下のセルに新しく書き込む。というものを想定しています。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
現在の私のコードを実行すると...
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
①URL取込用のウィンドウが出てくる。
|
30
|
+
|
31
|
+
②対象のサイトページのURLをコピーする。
|
32
|
+
|
33
|
+
③URL取込用ウィンドウをクリックすると自動でコピーしたURLが貼り付けられる。
|
34
|
+
|
35
|
+
④データ取得ボタンを押す。
|
36
|
+
|
37
|
+
⑤「エクセルデータの書き出しが完了しました。」と画面に表示される。
|
38
|
+
|
39
|
+
※リストという名前のExcel BookがPythonファイルと同じところに入っている前提。
|
40
|
+
|
41
|
+
⑥Excelを開くと、G列の2行目に価格が入力される。
|
42
|
+
|
43
|
+
⑦続けてURL取込用ウィンドウに別の商品ページのURLを貼り付け&取り込むとG列の2行目に上書きされてしまう。
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
こんな感じになります。価格は無事入力されるのですが、上記のように続けてまた別のURLをウィンドウに貼り付け取り込むと、G列の2行目に上書きされてしまいます。
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
理想としては、セルの中に値が入っていれば、そのすぐ下のセルに値を入れる。
|
54
|
+
|
55
|
+
という感じにしたいです。
|
56
|
+
|
57
|
+
それで、appendというメソッドを使ってみたのですが、エラーは出ないもののうまく下の行に追加とは行かないです。
|
58
|
+
|
59
|
+
説明が下手で申し訳ありません。。。
|
60
|
+
|
61
|
+
|
62
|
+
|
27
63
|
### 該当のソースコード
|
28
64
|
|
29
65
|
|
30
66
|
|
31
67
|
```Python
|
68
|
+
|
69
|
+
|
32
70
|
|
33
71
|
import requests
|
34
72
|
|
@@ -64,23 +102,29 @@
|
|
64
102
|
|
65
103
|
html_soup = BeautifulSoup(res, "html.parser")
|
66
104
|
|
67
|
-
price = html_soup.find('span', class_='mc-num').contents[0]
|
105
|
+
price = html_soup.find('span', class_='mc-num').contents[0]#サイトの価格を取得
|
68
106
|
|
69
|
-
|
107
|
+
data = [price]
|
108
|
+
|
109
|
+
|
70
110
|
|
71
111
|
wb = openpyxl.load_workbook('リスト.xlsx')
|
72
112
|
|
73
|
-
sheet = wb.active
|
113
|
+
sheet = http://wb.active
|
74
114
|
|
75
|
-
|
115
|
+
|
76
116
|
|
77
|
-
|
117
|
+
for i ,prices in enumerate(data, start=2):
|
78
118
|
|
79
|
-
|
119
|
+
sheet.cell(row=i, column=7, value=prices)
|
80
120
|
|
81
|
-
|
121
|
+
data.append(data)
|
82
122
|
|
123
|
+
|
124
|
+
|
125
|
+
# 保存して閉じる
|
126
|
+
|
83
|
-
wb.save('リスト.xlsx')
|
127
|
+
http://wb.save('リスト.xlsx')
|
84
128
|
|
85
129
|
wb.close()
|
86
130
|
|
@@ -90,7 +134,7 @@
|
|
90
134
|
|
91
135
|
#GUIの用意
|
92
136
|
|
93
|
-
root = tk.Tk()
|
137
|
+
root = http://tk.Tk()
|
94
138
|
|
95
139
|
root.title("商品データ書き出し") #タイトルの設定
|
96
140
|
|
@@ -114,6 +158,8 @@
|
|
114
158
|
|
115
159
|
root.mainloop() #ウィンドウを表示
|
116
160
|
|
161
|
+
|
162
|
+
|
117
163
|
```
|
118
164
|
|
119
165
|
|
@@ -122,15 +168,19 @@
|
|
122
168
|
|
123
169
|
|
124
170
|
|
125
|
-
|
171
|
+
URL取込用ウィンドウに続けてURLを追加していくので、追加したら既存のデータを上書きせずに真下のセルに値を入力したいのでappendメソッドを使っていますが、エラーは出ないものうまく書き込めません。
|
126
172
|
|
173
|
+
|
174
|
+
|
175
|
+
dataというリストに格納してそこに新しい値を追加しても、エクセルの既存の値が入っているセルの真下に追加ということはできませんよね?
|
176
|
+
|
177
|
+
|
178
|
+
|
127
|
-
appendなど
|
179
|
+
そもそもappendやfor文などでこういう場合は書くのでしょうか?
|
128
180
|
|
129
181
|
|
130
182
|
|
131
183
|
分かりずらい説明で申し訳ありません。
|
132
|
-
|
133
|
-
よろしくお願いいたします。
|
134
184
|
|
135
185
|
|
136
186
|
|
@@ -138,8 +188,6 @@
|
|
138
188
|
|
139
189
|
|
140
190
|
|
141
|
-
|
191
|
+
URLを取得するサイトは【ミスミ】というサイトを想定しています。
|
142
192
|
|
143
|
-
|
144
|
-
|
145
|
-
|
193
|
+
https://jp.misumi-ec.com/
|