teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

2020/12/18 03:14

投稿

sasu46
sasu46

スコア9

title CHANGED
File without changes
body CHANGED
File without changes

3

2020/12/18 03:14

投稿

sasu46
sasu46

スコア9

title CHANGED
File without changes
body CHANGED
File without changes

2

2020/12/17 10:33

投稿

sasu46
sasu46

スコア9

title CHANGED
File without changes
body CHANGED
File without changes

1

2020/12/13 11:53

投稿

sasu46
sasu46

スコア9

title CHANGED
File without changes
body CHANGED
@@ -1,19 +1,38 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
- 伊沢剛さんの「面倒な作業が秒速で終わる Excel×Python」で勉強している初心者です。
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 range(2,3):
59
+ for i ,prices in enumerate(data, start=2):
39
- sheet.cell(column=7, row=i + 1, value=price) # A列(title)
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
- appendなど使うと追加、追加、できるといてあったのですがイマイチど使うか分からず断念
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/