質問編集履歴

5

次見る人にわかりやすいように一部編集

2019/11/22 14:32

投稿

y-oming
y-oming

スコア7

test CHANGED
@@ -1 +1 @@
1
- 【Python 3.8.0】 CSSセレクトを用いて「クラス名」、「ID名」のない子要素を指定して取得を行たい
1
+ 【Python 3.8.0】 cssselectで要素取得できな 原因:JavaScript
test CHANGED
File without changes

4

URL

2019/11/22 14:32

投稿

y-oming
y-oming

スコア7

test CHANGED
File without changes
test CHANGED
@@ -30,7 +30,9 @@
30
30
 
31
31
  こちらは対象ページの送料を含むHTMLの一部になります。
32
32
 
33
+ ページURL:
34
+
33
- ページURL:[https://page.auctions.yahoo.co.jp/jp/auction/u290078820]
35
+ [https://page.auctions.yahoo.co.jp/jp/auction/u290078820]
34
36
 
35
37
 
36
38
 

3

即決価格のHTMLを追加しました。

2019/11/22 13:54

投稿

y-oming
y-oming

スコア7

test CHANGED
File without changes
test CHANGED
@@ -26,7 +26,7 @@
26
26
 
27
27
 
28
28
 
29
- #![イメージ説明](370ab3991295bebae7915e90e5b08a81.png)
29
+ #
30
30
 
31
31
  こちらは対象ページの送料を含むHTMLの一部になります。
32
32
 
@@ -58,7 +58,7 @@
58
58
 
59
59
 
60
60
 
61
- ```サンプルコード送料
61
+ ```Souryou
62
62
 
63
63
  import requests
64
64
 
@@ -84,11 +84,39 @@
84
84
 
85
85
  ### 試したこと
86
86
 
87
- 同ページ内の現在価格"4,350円"もほぼ同じ構造でデータが収納されていたので、試しに、下記のコードを実行したところ"4,350円"は取得することができました。
87
+ 同ページ内の即決価格"4,350円"もほぼ同じ構造でデータが収納されていたので、試しに、下記のコードを実行したところ"4,350円"は取得することができました。
88
88
 
89
89
 
90
90
 
91
+ 【即決価格を含むHTML】
92
+
93
+ <dl class="Price__body Price__body--none">
94
+
95
+ <dt class="Price__title">即決価格
96
+
97
+
98
+
99
+
100
+
101
+ <\dt>
102
+
103
+ <dd class="Price__value">
104
+
105
+
106
+
107
+ "
108
+
109
+ 4,350円"
110
+
111
+ <span class="Price__tax">(税 0 円)<\span>
112
+
113
+ <\dd>
114
+
115
+
116
+
117
+
118
+
91
- ```サンプルコード現在価格
119
+ ```SokketsuKakaku
92
120
 
93
121
  import requests
94
122
 
@@ -114,7 +142,7 @@
114
142
 
115
143
 
116
144
 
117
- 送料と現在価格で構造がほとんど同じのため、なぜ現在価格の"4,350円"が取得でき、送料の"2,980円"だけが取得できないのかがどうしてもわかりませんでした。
145
+ 送料と即決価格で構造がほとんど同じのため、なぜ即決価格の"4,350円"が取得でき、送料の"2,980円"だけが取得できないのかがどうしてもわかりませんでした。
118
146
 
119
147
 
120
148
 

2

現在価格は取得でき、送料が取得できないというところに着目しました。

2019/11/22 13:53

投稿

y-oming
y-oming

スコア7

test CHANGED
File without changes
test CHANGED
@@ -18,7 +18,7 @@
18
18
 
19
19
 
20
20
 
21
- "1,280円"
21
+ "2,980円"
22
22
 
23
23
  <span class="BidModal__postageTax">(税込み)</span>
24
24
 
@@ -30,9 +30,11 @@
30
30
 
31
31
  こちらは対象ページの送料を含むHTMLの一部になります。
32
32
 
33
+ ページURL:[https://page.auctions.yahoo.co.jp/jp/auction/u290078820]
33
34
 
34
35
 
36
+
35
- CSSセレクタを用いて、送料をスクレイピングしようと思ったのですが、送料である1,280円を含む子の要素には、クラス名やID名など設定されておらずこれらの情報らは取得ができませんでした
37
+ CSSセレクタを用いて、送料をスクレイピングしようと思ったのですが、それがかないません。
36
38
 
37
39
 
38
40
 
@@ -46,7 +48,7 @@
46
48
 
47
49
  【実行結果】
48
50
 
49
- []
51
+ IndexError: list index out of range
50
52
 
51
53
  ```
52
54
 
@@ -56,7 +58,7 @@
56
58
 
57
59
 
58
60
 
59
- ```Python
61
+ ```サンプルコード送料
60
62
 
61
63
  import requests
62
64
 
@@ -64,15 +66,17 @@
64
66
 
65
67
 
66
68
 
67
- URL = "https://page.auctions.yahoo.co.jp/jp/auction/r362462319#"
69
+ URL = "https://page.auctions.yahoo.co.jp/jp/auction/u290078820"
68
70
 
69
71
  response = requests.get(URL)
70
72
 
71
73
  HTML = lxml.html.fromstring(response.text)
72
74
 
73
- SOURYOU = HTML.cssselect('#method0 > div *:first-child')
75
+ SOURYOU = HTML.cssselect('#method0 > div')[0].text.strip()
74
76
 
75
77
  print(SOURYOU)
78
+
79
+
76
80
 
77
81
  ```
78
82
 
@@ -80,15 +84,37 @@
80
84
 
81
85
  ### 試したこと
82
86
 
83
-
84
-
85
- 現在指定できていは一つ上の親(div要素)まなので「親要素から見て最初子要素」から取得が可能な*:first-child用いた取得方法を試してみました。
87
+ 同ページ内の現在価格"4,350円"もほぼ同じ構造でデータ収納されていので、試しに、下記コード実行しところ"4,350円"は取得することができました。
86
-
87
- ですがコードを実行してみると何も入っていない空のリストが返却されてしまいました。
88
88
 
89
89
 
90
90
 
91
+ ```サンプルコード現在価格
92
+
93
+ import requests
94
+
95
+ import lxml.html
96
+
97
+
98
+
99
+ URL = "https://page.auctions.yahoo.co.jp/jp/auction/u290078820"
100
+
101
+ response = requests.get(URL)
102
+
103
+ HTML = lxml.html.fromstring(response.text)
104
+
105
+
106
+
107
+ KAKAKU = HTML.cssselect('#l-sub > div.ProductInformation > ul > li.ProductInformation__item.js-stickyNavigation-start > div > dl > dd.Price__value')[0].text.strip()
108
+
109
+
110
+
111
+ print(KAKAKU)
112
+
113
+ ```
114
+
115
+
116
+
91
- もしかする1,280円はcssselectでは取得できないなのと考え調べみたのですが、適切な検索ワード検討がつず質問をさていただきました。
117
+ 送料現在価格で構造がほとんど同じため、なぜ現在価格の"4,350円"が取得でき、送料の"2,980円"だけが取得できないのかがどうしてもりまんでした。
92
118
 
93
119
 
94
120
 

1

Google Chromeの開発者用ツールの画像を添付いたしました。

2019/11/22 13:34

投稿

y-oming
y-oming

スコア7

test CHANGED
File without changes
test CHANGED
@@ -12,21 +12,21 @@
12
12
 
13
13
  <dd class="BidModal__postageDetail" id="method0">
14
14
 
15
- <div class="BidModal__postageDetail" style="
16
15
 
17
- background-color: white;
18
16
 
19
- ">
17
+ <div class="BidModal__postageDetail" style="background-color: white;">
20
18
 
21
- "1,280円"
22
19
 
20
+
21
+ "1,280円"
22
+
23
- <span class="BidModal__postageTax">(税込み)</span>
23
+ <span class="BidModal__postageTax">(税込み)</span>
24
24
 
25
25
  </div>
26
26
 
27
27
 
28
28
 
29
- #
29
+ #![イメージ説明](370ab3991295bebae7915e90e5b08a81.png)
30
30
 
31
31
  こちらは対象ページの送料を含むHTMLの一部になります。
32
32