回答編集履歴

3

追記 入力値をASINからJANにへん

2018/01/09 13:16

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -130,7 +130,7 @@
130
130
 
131
131
  def __init__(self):
132
132
 
133
- self.jan = ['1449355730', '4873117585']
133
+ self.jan = ['9781449355739', '9784873117584', '9784873112992']
134
134
 
135
135
  return MimicArgs()
136
136
 

2

変更後のソースコードを追加

2018/01/09 13:16

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -19,3 +19,161 @@
19
19
  0. 引数で渡されたlistを元にスクレイピングを行い結果を返す。
20
20
 
21
21
  0. 2の結果を表示する。
22
+
23
+
24
+
25
+ 質問文のコードを改造しました。ご参考まで.
26
+
27
+ ```Pyhon
28
+
29
+ # -*- coding: utf-8 -*-
30
+
31
+ from selenium import webdriver
32
+
33
+ from selenium.common.exceptions import NoSuchElementException
34
+
35
+ import argparse
36
+
37
+ import codecs
38
+
39
+ import sys
40
+
41
+ from contextlib import closing
42
+
43
+ import pprint
44
+
45
+
46
+
47
+ sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
48
+
49
+ sys.stdin = codecs.getreader('utf_8')(sys.stdin)
50
+
51
+
52
+
53
+
54
+
55
+ class Scraper:
56
+
57
+ def __init__(self):
58
+
59
+ self.target_url = "https://antlion.xsrv.jp/"
60
+
61
+ self.driver = webdriver.PhantomJS()
62
+
63
+ self.DELAY_SLEEP = 1 # sec
64
+
65
+
66
+
67
+ def close(self):
68
+
69
+ if self.driver is not None:
70
+
71
+ self.driver.close()
72
+
73
+ self.driver = None
74
+
75
+
76
+
77
+ def scrap(self, jan):
78
+
79
+ v = {'jan': jan}
80
+
81
+ try:
82
+
83
+ self.driver.implicitly_wait(self.DELAY_SLEEP)
84
+
85
+ # JAN code
86
+
87
+ self.driver.get(self.target_url)
88
+
89
+ self.driver.implicitly_wait(self.DELAY_SLEEP)
90
+
91
+ elem = self.driver.find_element_by_xpath('//*[@id="content"]/div[1]/div/form/input[2]')
92
+
93
+ elem.send_keys(jan)
94
+
95
+ elem = self.driver.find_element_by_xpath('//*[@id="content"]/div[1]/div/form/input[3]')
96
+
97
+ elem.click()
98
+
99
+ elems = self.driver.find_elements_by_xpath('//*[@id="content"]/div[2]/div[5]/ul/li')
100
+
101
+ for e in elems:
102
+
103
+ desc = e.get_attribute('textContent')
104
+
105
+ if desc.startswith("ASIN"):
106
+
107
+ v['asin'] = desc.split()[-1]
108
+
109
+ except NoSuchElementException:
110
+
111
+ print("not available")
112
+
113
+ except Exception as e:
114
+
115
+ print(e)
116
+
117
+
118
+
119
+ return v
120
+
121
+
122
+
123
+
124
+
125
+ def get_input(debug=True):
126
+
127
+ if debug:
128
+
129
+ class MimicArgs:
130
+
131
+ def __init__(self):
132
+
133
+ self.jan = ['1449355730', '4873117585']
134
+
135
+ return MimicArgs()
136
+
137
+ parser = argparse.ArgumentParser(description='Get asin from JANJAN_URL')
138
+
139
+ parser.add_argument('--jan', nargs='+')
140
+
141
+ return parser.parse_args()
142
+
143
+
144
+
145
+
146
+
147
+ def main():
148
+
149
+ args = get_input()
150
+
151
+ pp = pprint.PrettyPrinter()
152
+
153
+ with closing(Scraper()) as sc:
154
+
155
+ for jan in args.jan:
156
+
157
+ products = sc.scrap(jan)
158
+
159
+ pp.pprint(products)
160
+
161
+
162
+
163
+
164
+
165
+ if __name__ == "__main__":
166
+
167
+ main()
168
+
169
+
170
+
171
+ ```
172
+
173
+
174
+
175
+ ■謝辞
176
+
177
+ mkgrei様の回答文のソースコードを参考に致しました。
178
+
179
+ 素晴らしいソースコードありがとうございます。

1

変更!

2018/01/09 12:57

投稿

umyu
umyu

スコア5846

test CHANGED
@@ -12,10 +12,10 @@
12
12
 
13
13
 
14
14
 
15
- mainメソッドで複数の処理を行うのではなくメソッドを分けてくださいな。
15
+ mainメソッドで複数の処理を行うのではなくメソッドを分けてくださいな。
16
16
 
17
- 1,コマンドライン引数で渡されたJanコードをlistとして返す。
17
+ 0. コマンドライン引数で渡されたJanコードをlistとして返す。
18
18
 
19
- 2,引数で渡されたlistを元にスクレイピングを行い結果を返す。
19
+ 0. 引数で渡されたlistを元にスクレイピングを行い結果を返す。
20
20
 
21
- 3,2の結果を表示する。
21
+ 0. 2の結果を表示する。