質問編集履歴
4
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
3
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
2
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|
1
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,19 +1,38 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
2
|
|
3
|
-
|
3
|
+
プログラミング初心者です。対象ページからスクレイピングし、エクセルに各行追加していくというプログラムを作ろうとしています。
|
4
|
+
皆さんお忙しい中、申し訳ございません。
|
5
|
+
よろしくお願いします。
|
4
6
|
|
5
|
-
書籍に書いてあるコードを実行したら問題なく動作しました。
|
6
|
-
書籍にはアマゾンサイトかにアクセスし、自分の気になる商品のURLをコピーしテキストBOXに張り付けるとエクセルに出力し、商品名、価格、URLなどが書かれる。というコードです。
|
7
|
-
|
8
|
-
今回僕がやりたいことは、セルを指定してとりあえず価格だけを抽出したいと思い自分なりに書いてみました。
|
9
|
-
価格は抽出できたものの、例えばG2セルに書き込んだら次に新しいURLが入力されたらG3セルに書き出すという風になるのが理想です。
|
10
|
-
|
11
7
|
URLを取得するサイトは【ミスミ】というサイトを想定しています。
|
12
8
|
https://jp.misumi-ec.com/
|
13
9
|
|
10
|
+
|
11
|
+
早速ですが私が想定している作りたいものは...プログラムを実行→ウィンドウが出る→ミスミサイトの商品ページのURLをコピペ→URL取込用ウィンドウに貼り付け&取込ボタンを押して取り込む→エクセルの指定のセルに値を書き込み。ウィンドウに違う商品ページのURLを続けて貼り付け&取り込むと既存に書き込みしたセルの真下のセルに新しく書き込む。というものを想定しています。
|
12
|
+
|
13
|
+
現在の私のコードを実行すると...
|
14
|
+
|
15
|
+
①URL取込用のウィンドウが出てくる。
|
16
|
+
②対象のサイトページのURLをコピーする。
|
17
|
+
③URL取込用ウィンドウをクリックすると自動でコピーしたURLが貼り付けられる。
|
18
|
+
④データ取得ボタンを押す。
|
19
|
+
⑤「エクセルデータの書き出しが完了しました。」と画面に表示される。
|
20
|
+
※リストという名前のExcel BookがPythonファイルと同じところに入っている前提。
|
21
|
+
⑥Excelを開くと、G列の2行目に価格が入力される。
|
22
|
+
⑦続けてURL取込用ウィンドウに別の商品ページのURLを貼り付け&取り込むとG列の2行目に上書きされてしまう。
|
23
|
+
|
24
|
+
|
25
|
+
こんな感じになります。価格は無事入力されるのですが、上記のように続けてまた別のURLをウィンドウに貼り付け取り込むと、G列の2行目に上書きされてしまいます。
|
26
|
+
|
27
|
+
理想としては、セルの中に値が入っていれば、そのすぐ下のセルに値を入れる。
|
28
|
+
という感じにしたいです。
|
29
|
+
それで、appendというメソッドを使ってみたのですが、エラーは出ないもののうまく下の行に追加とは行かないです。
|
30
|
+
説明が下手で申し訳ありません。。。
|
31
|
+
|
14
32
|
### 該当のソースコード
|
15
33
|
|
16
34
|
```Python
|
35
|
+
|
17
36
|
import requests
|
18
37
|
import datetime
|
19
38
|
import pandas as pd
|
@@ -31,20 +50,23 @@
|
|
31
50
|
url = urlText.get("1.0", "end") #1文字目から最後まで取得
|
32
51
|
res = req.urlopen(url)
|
33
52
|
html_soup = BeautifulSoup(res, "html.parser")
|
34
|
-
price = html_soup.find('span', class_='mc-num').contents[0]
|
53
|
+
price = html_soup.find('span', class_='mc-num').contents[0]#サイトの価格を取得
|
35
|
-
|
54
|
+
data = [price]
|
55
|
+
|
36
56
|
wb = openpyxl.load_workbook('リスト.xlsx')
|
37
|
-
sheet = wb.active
|
57
|
+
sheet = http://wb.active
|
58
|
+
|
38
|
-
for i in
|
59
|
+
for i ,prices in enumerate(data, start=2):
|
39
|
-
sheet.cell(
|
60
|
+
sheet.cell(row=i, column=7, value=prices)
|
40
|
-
|
61
|
+
data.append(data)
|
62
|
+
|
41
|
-
# 保存して閉じる
|
63
|
+
# 保存して閉じる
|
42
|
-
wb.save('リスト.xlsx')
|
64
|
+
http://wb.save('リスト.xlsx')
|
43
65
|
wb.close()
|
44
66
|
messagebox.showinfo("完了", "エクセルデータの書き出しが完了しました。")
|
45
67
|
|
46
68
|
#GUIの用意
|
47
|
-
root = tk.Tk()
|
69
|
+
root = http://tk.Tk()
|
48
70
|
root.title("商品データ書き出し") #タイトルの設定
|
49
71
|
root.geometry("700x55") #サイズの設定
|
50
72
|
root.grid()
|
@@ -56,18 +78,20 @@
|
|
56
78
|
urlText.grid(row=1,column=2)
|
57
79
|
getButton.grid(row=1,column=3)
|
58
80
|
root.mainloop() #ウィンドウを表示
|
81
|
+
|
59
82
|
```
|
60
83
|
|
61
84
|
### 試したこと
|
62
85
|
|
63
|
-
いろいろ思考錯誤して調べて実行しての繰り返しで、結局できませんでした。
|
64
|
-
|
86
|
+
URL取込用ウィンドウに続けてURLを追加していくので、追加したら既存のデータを上書きせずに真下のセルに値を入力したいのでappendメソッドを使っていますが、エラーは出ないものうまく書き込めません。
|
65
87
|
|
88
|
+
dataというリストに格納してそこに新しい値を追加しても、エクセルの既存の値が入っているセルの真下に追加ということはできませんよね?
|
89
|
+
|
90
|
+
そもそもappendやfor文などでこういう場合は書くのでしょうか?
|
91
|
+
|
66
92
|
分かりずらい説明で申し訳ありません。
|
67
|
-
よろしくお願いいたします。
|
68
93
|
|
69
94
|
### 補足情報(FW/ツールのバージョンなど)
|
70
95
|
|
71
|
-
また、できるようになったら、価格や型番、商品名をリストに格納してそのデータをエクセルに追加していく、という物もやってみたいと思っています。
|
72
|
-
|
73
|
-
|
96
|
+
URLを取得するサイトは【ミスミ】というサイトを想定しています。
|
97
|
+
https://jp.misumi-ec.com/
|