質問編集履歴
3
質問に関係ない部分を修正しました
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=
|
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
|
-
|
54
|
+
driver.get(url + "プリウス")
|
76
|
-
|
55
|
+
data = driver.page_source.encode('utf-8')
|
77
|
-
|
56
|
+
soup = BeautifulSoup(data, "lxml")
|
78
57
|
|
79
|
-
|
58
|
+
if soup.find("body").find("name"):
|
80
|
-
carcode.append(i)
|
81
|
-
|
59
|
+
body = soup.find("body")
|
82
|
-
|
60
|
+
bodytype.append(body.find("name").string)
|
83
|
-
|
61
|
+
else:
|
84
|
-
carcode.append(i)
|
85
|
-
|
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
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
BeautifulSoupでの
|
1
|
+
BeautifulSoupで親要素の指定を無視して子要素が取得されてしまう
|
body
CHANGED
File without changes
|
1
コード中の不要な部分を消しました
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
|
-
|
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
|
-
|
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 +
|
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(
|
80
|
+
carcode.append(i)
|
87
81
|
body = soup.find("body")
|
88
82
|
bodytype.append(body.find("name").string)
|
89
83
|
else:
|
90
|
-
carcode.append(
|
84
|
+
carcode.append(i)
|
91
85
|
bodytype.append("NA")
|
92
86
|
|
93
87
|
df = pd.DataFrame({"carcode":carcode,"bodytype":bodytype})
|