回答編集履歴
3
誤字修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
行いたい事はどちらなのでしょうか?
|
2
2
|
・真ん中のオレンジ部分( div id="primary-navigation" 配下)の html(ソース)を取得したい
|
3
|
-
・真ん中のオレンジ部分の「店舗一覧」をクリックした時の遷移先 URL(href)を取得したい
|
3
|
+
・真ん中のオレンジ部分の「店舗一覧」などをクリックした時の遷移先 URL(href)を取得したい
|
4
4
|
|
5
5
|
> main_body = soup.find("div", {"id": "primary-navigation"})
|
6
6
|
|
@@ -62,8 +62,8 @@
|
|
62
62
|
</div><!-- #primary-header --> ★その2
|
63
63
|
```
|
64
64
|
|
65
|
-
この★その1と★その2の影響で、<div id="primary-navigation"・・・の中身ごと
|
65
|
+
この★その1と★その2の影響で、**<div id="primary-navigation"・・・の中身ごと
|
66
|
-
|
66
|
+
コメントアウトとして認識されてしまい、データが取得されない**ということです。
|
67
67
|
|
68
68
|
> https://ulnomad.com/2017/06/%E3%80%90html%E3%80%91%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9/#i-3
|
69
69
|
> コメントの途中に「-(ハイフン)」が入っていると、ブラウザによっては表示に影響が出る可能性もあるので、コメントの途中でハイフンを入れないようにする。
|
@@ -75,7 +75,7 @@
|
|
75
75
|
2.「 primary-navigation 」を囲っている上(親)の要素から取得する
|
76
76
|
→今後のhref取得において、書き方によっては他の href も取得されてしまう
|
77
77
|
3.python のプログラムに <!-- <div class="panel panel-primary visible-lg"> を空に置換してあげる
|
78
|
-
→応急措置です。他にもこのような箇所があるため、本来であれば1のhtml修正を行った方が良いです。
|
78
|
+
→応急措置です。他にもこのような箇所があるため、本来であれば1のhtml記述不正の修正を行った方が良いです。
|
79
79
|
|
80
80
|
ちなみにコードはこれです。
|
81
81
|
|
2
回答追記
answer
CHANGED
@@ -37,24 +37,50 @@
|
|
37
37
|
※ちなみに html ソース上にある <div id="main0"> は
|
38
38
|
同じ書き方 main_body = soup.find("div", {"id": "main0"}) で取得できています。
|
39
39
|
|
40
|
-
ですが確認したところ「 primary-navigation 」という文字が使用できないようで
|
40
|
+
~~ですが確認したところ「 primary-navigation 」という文字が使用できないようで~~
|
41
|
-
そのため「 None 」と返却されているようです。
|
41
|
+
~~そのため「 None 」と返却されているようです。~~
|
42
42
|
|
43
|
-
確認方法はこちらで行いました。
|
43
|
+
~~確認方法はこちらで行いました。~~
|
44
|
-
https://docs.python.org/ja/3/library/keyword.html
|
44
|
+
~~https://docs.python.org/ja/3/library/keyword.html~~
|
45
45
|
|
46
|
+
★訂正
|
47
|
+
すみません、何か勘違いしていました。
|
48
|
+
ローカルで <div id="primary-header" data-bk-dynamic="primary-header"> 配下のhtmlだけ抜粋し
|
49
|
+
試してみたところ「primary-header」でも取得できました。
|
50
|
+
|
51
|
+
では何が原因か探ったところ、<div id="primary-header"・・・の直前にある
|
52
|
+
コメントアウト部分が悪さをしているようです。
|
53
|
+
|
46
|
-
```
|
54
|
+
```html
|
55
|
+
<!-- <div class="panel panel-primary visible-lg"> --!> ★その1
|
56
|
+
<div id="primary-navigation" data-bk-dynamic="primary-navigation">
|
47
|
-
|
57
|
+
<ul>
|
58
|
+
(略)
|
48
|
-
|
59
|
+
<a href="/ワイモバイル">Y!モバイル</a>
|
49
|
-
|
60
|
+
</li>
|
61
|
+
</ul>
|
50
|
-
|
62
|
+
</div><!-- #primary-header --> ★その2
|
51
|
-
#False が返却される
|
52
63
|
```
|
53
64
|
|
65
|
+
この★その1と★その2の影響で、<div id="primary-navigation"・・・の中身ごと
|
66
|
+
**コメントアウトとして認識されてしまい、データが取得されない**ということです。
|
67
|
+
|
68
|
+
> https://ulnomad.com/2017/06/%E3%80%90html%E3%80%91%E3%82%B3%E3%83%A1%E3%83%B3%E3%83%88%E3%82%A2%E3%82%A6%E3%83%88%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9/#i-3
|
69
|
+
> コメントの途中に「-(ハイフン)」が入っていると、ブラウザによっては表示に影響が出る可能性もあるので、コメントの途中でハイフンを入れないようにする。
|
70
|
+
|
54
71
|
解決方法としては
|
55
|
-
・そのそもの id 名「 primary-navigation 」を他の文字に変更する
|
72
|
+
~~・そのそもの id 名「 primary-navigation 」を他の文字に変更する~~
|
73
|
+
1.html上で不正なコメントアウトを消す
|
74
|
+
→html修正が必要
|
56
|
-
|
75
|
+
2.「 primary-navigation 」を囲っている上(親)の要素から取得する
|
76
|
+
→今後のhref取得において、書き方によっては他の href も取得されてしまう
|
77
|
+
3.python のプログラムに <!-- <div class="panel panel-primary visible-lg"> を空に置換してあげる
|
57
|
-
|
78
|
+
→応急措置です。他にもこのような箇所があるため、本来であれば1のhtml修正を行った方が良いです。
|
58
79
|
|
59
|
-
|
80
|
+
ちなみにコードはこれです。
|
81
|
+
|
82
|
+
```python
|
83
|
+
html_doc = requests.get("http://iphone119.xyz/").text
|
84
|
+
html = html_doc.replace('<!-- <div class="panel panel-primary visible-lg"> --!>', '') #追加
|
60
|
-
|
85
|
+
soup = BeautifulSoup(html, 'html.parser')
|
86
|
+
```
|
1
回答追記
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
行いたい事はどちらなのでしょうか?
|
2
|
-
・真ん中のオレンジ部分(div id="primary-navigation"配下)のhtml(ソース)を取得したい
|
2
|
+
・真ん中のオレンジ部分( div id="primary-navigation" 配下)の html(ソース)を取得したい
|
3
|
-
・真ん中のオレンジ部分の「店舗一覧」をクリックした時の遷移先URL(href)を取得したい
|
3
|
+
・真ん中のオレンジ部分の「店舗一覧」をクリックした時の遷移先 URL(href)を取得したい
|
4
4
|
|
5
5
|
> main_body = soup.find("div", {"id": "primary-navigation"})
|
6
6
|
|
@@ -14,4 +14,47 @@
|
|
14
14
|
---
|
15
15
|
|
16
16
|
あと、質問する際は実際のコードを記載した方が
|
17
|
-
回答しやすいかと思います。
|
17
|
+
回答しやすいかと思います。
|
18
|
+
|
19
|
+
|
20
|
+
★★★★★★★★
|
21
|
+
追記
|
22
|
+
|
23
|
+
「 URL(href)」を取得したいとのことですが、
|
24
|
+
この書き方では前者の「真ん中のオレンジ部分(div id="primary-navigation"配下)の html(ソース)」が返却されます。
|
25
|
+
|
26
|
+
そのため「 URL(href)」を取得するのであれば
|
27
|
+
この書き方に追加で href を取得していくためのコードが必要となります。
|
28
|
+
|
29
|
+
そちらは「 python href 取得 」などでググればすぐ出てくると思います。
|
30
|
+
|
31
|
+
------------------------
|
32
|
+
|
33
|
+
ですが、そもそも find で div id="primary-navigation" 配下が取得できないとのことなので
|
34
|
+
そこを解消します。
|
35
|
+
|
36
|
+
まず、書き方は正しいです。
|
37
|
+
※ちなみに html ソース上にある <div id="main0"> は
|
38
|
+
同じ書き方 main_body = soup.find("div", {"id": "main0"}) で取得できています。
|
39
|
+
|
40
|
+
ですが確認したところ「 primary-navigation 」という文字が使用できないようで
|
41
|
+
そのため「 None 」と返却されているようです。
|
42
|
+
|
43
|
+
確認方法はこちらで行いました。
|
44
|
+
https://docs.python.org/ja/3/library/keyword.html
|
45
|
+
|
46
|
+
```python
|
47
|
+
import keyword
|
48
|
+
print('main0'.isidentifier())
|
49
|
+
#True が返却される
|
50
|
+
print('primary-navigation'.isidentifier())
|
51
|
+
#False が返却される
|
52
|
+
```
|
53
|
+
|
54
|
+
解決方法としては
|
55
|
+
・そのそもの id 名「 primary-navigation 」を他の文字に変更する
|
56
|
+
・「 primary-navigation 」を囲っている上(親)の要素から取得する
|
57
|
+
のどちらかになると思います。
|
58
|
+
|
59
|
+
ただ、後者だと今後 href を取得しようとしたとき
|
60
|
+
書き方によっては他の href も取得されてしまうので、前者が良いかと思われます。
|