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

質問編集履歴

3

質問に関係ない部分を修正しました

2017/07/28 08:27

投稿

jackojacko_
jackojacko_

スコア17

title CHANGED
File without changes
body CHANGED
@@ -1,10 +1,10 @@
1
1
  ###前提・実現したいこと
2
- カーセンサーの中古車検索API(https://webservice.recruit.co.jp/carsensor/reference.html)を用いてスクレイピングをしようとしています。
2
+ カーセンサーnetの中古車検索API(https://webservice.recruit.co.jp/carsensor/reference.html)を用いてスクレイピングをしようとしています。
3
3
  BeautifulSoupを使っているのですが、<body>内の<name>を出力したいのに、以下のコードではbodyより手前にある<brand>内の<name>が出力されてしまいます。
4
4
  どうすればbody内のnameを取得できるでしょうか?
5
5
 
6
6
  ###発生している問題・エラーメッセージ
7
- カーセンサーのAPIを使うと、たとえば車種「プリウス」で検索すると以下のようなXMLが出力されます。
7
+ カーセンサーnetのAPIを使うと、たとえば車種「プリウス」で検索すると以下のようなXMLが出力されます。
8
8
  以下の「ミニバン」を取得したいのに、「トヨタ」が取得されてしまいます。
9
9
  ```XML
10
10
  <results xmlns="http://webservice.recruit.co.jp/carsensor/">
@@ -33,60 +33,33 @@
33
33
  <code>M</code>
34
34
  <name>ミニバン</name>
35
35
  </body>
36
- <odd>1km</odd>
37
- <year>2017</year>
38
- <shop>
39
- <name>カーズカフェ カーベル姫路東</name>
40
- <pref>
41
- <code>28</code>
42
- <name>兵庫県</name>
43
- </pref>
44
- <lat>34.796492</lat>
45
- <lng>134.721361</lng>
46
- <datum>world</datum>
47
- </shop>
48
- <color>各色選べます(オプション色は32,400円高)</color>
49
- <maintenance_comment>
50
- 9型フルセグ地デジ対応高詳細ナビ(DVDビデオ再生可)CD録音機能&Bluetooth接続&USB接続&ニンテンドーDS接続&バックカメラ&アンテナ分離型ETC&フロアマットを取り付け済でお渡しです!新車をご注文後メーカーよりお取り寄せいたしますので、現行最新モデルでのご準備となります。ボディーカラーお選びいただけます(オプション色は32,400円高)メーカーオプション等の追加もできます!
51
- </maintenance_comment>
52
- <maintenance_fee/>
53
- <photo>
54
36
  (以下略)
55
37
  </usedcar>
56
38
  </results>
57
39
  ```
58
40
 
59
41
  ###該当のソースコード
60
- ```ここに言語を入力
42
+ ```Python
61
43
  import lxml.html
62
44
  import selenium
63
45
  from selenium import webdriver
64
46
  from bs4 import BeautifulSoup
65
- import pandas as pd
66
47
 
67
- carcode=[]
68
48
  bodytype=[]
69
49
 
70
- url='http://webservice.recruit.co.jp/carsensor/usedcar/v1/?key=4c3c5fca5e53632a&model='
50
+ url='http://webservice.recruit.co.jp/carsensor/usedcar/v1/?key=(APIキー)&model='
71
51
 
72
52
  driver = webdriver.Chrome('C:\selenium\chromedriver')
73
53
 
74
- for i in range(1,10):
75
- driver.get(url + "プリウス")
54
+ driver.get(url + "プリウス")
76
- data = driver.page_source.encode('utf-8')
55
+ data = driver.page_source.encode('utf-8')
77
- soup = BeautifulSoup(data, "lxml")
56
+ soup = BeautifulSoup(data, "lxml")
78
57
 
79
- if soup.find("body").find("name"):
58
+ if soup.find("body").find("name"):
80
- carcode.append(i)
81
- body = soup.find("body")
59
+ body = soup.find("body")
82
- bodytype.append(body.find("name").string)
60
+ bodytype.append(body.find("name").string)
83
- else:
61
+ else:
84
- carcode.append(i)
85
- bodytype.append("NA")
62
+ bodytype.append("NA")
86
63
 
87
- df = pd.DataFrame({"carcode":carcode,"bodytype":bodytype})
88
-
89
- df.to_csv("result.csv", index=False, encoding='utf-8')
90
-
91
64
  driver.quit()
92
65
  ```

2

2017/07/28 08:27

投稿

jackojacko_
jackojacko_

スコア17

title CHANGED
@@ -1,1 +1,1 @@
1
- BeautifulSoupでのスクレイピングくできない
1
+ BeautifulSoupで親要素指定を無視して子要素取得されてし
body CHANGED
File without changes

1

コード中の不要な部分を消しました

2017/07/27 04:38

投稿

jackojacko_
jackojacko_

スコア17

title CHANGED
File without changes
body CHANGED
@@ -16,7 +16,7 @@
16
16
  <id>CU4326907244</id>
17
17
  <brand>
18
18
  <code>TO</code>
19
- **<name>トヨタ</name>**
19
+ <name>トヨタ</name>
20
20
  </brand>
21
21
  <model>プリウスα</model>
22
22
  <grade>1.8 S ツーリングセレクション</grade>
@@ -31,7 +31,7 @@
31
31
  </desc>
32
32
  <body>
33
33
  <code>M</code>
34
- **<name>ミニバン</name>**
34
+ <name>ミニバン</name>
35
35
  </body>
36
36
  <odd>1km</odd>
37
37
  <year>2017</year>
@@ -64,30 +64,24 @@
64
64
  from bs4 import BeautifulSoup
65
65
  import pandas as pd
66
66
 
67
- dat=pd.read_csv('carcode.csv',encoding="UTF-8")
68
67
  carcode=[]
69
68
  bodytype=[]
70
69
 
71
70
  url='http://webservice.recruit.co.jp/carsensor/usedcar/v1/?key=4c3c5fca5e53632a&model='
72
- params=dict(
73
- key="4c3c5fca5e53632a",
74
- model="プリウス"
75
- #model=dat.iloc[1,1]
76
- )
77
71
 
78
72
  driver = webdriver.Chrome('C:\selenium\chromedriver')
79
73
 
80
74
  for i in range(1,10):
81
- driver.get(url + dat.iloc[i,1])
75
+ driver.get(url + "プリウス")
82
76
  data = driver.page_source.encode('utf-8')
83
77
  soup = BeautifulSoup(data, "lxml")
84
78
 
85
79
  if soup.find("body").find("name"):
86
- carcode.append(dat.iloc[i,0])
80
+ carcode.append(i)
87
81
  body = soup.find("body")
88
82
  bodytype.append(body.find("name").string)
89
83
  else:
90
- carcode.append(dat.iloc[i,0])
84
+ carcode.append(i)
91
85
  bodytype.append("NA")
92
86
 
93
87
  df = pd.DataFrame({"carcode":carcode,"bodytype":bodytype})