

> <https://www.nikkei.com/nkd/company/?scode=3911>

このページの

  1. 現在値(15:00) 410 円
  2. 始値 (9:03) 422 円
  3. 高値 (9:03) 422 円
  4. 安値 (14:05) 399 円

の4つをうまく取得したいのですが、現在値を単体は簡単に取れるのですが2~4が取れません。  
いい方法を教えていただきたいです。よろしくおねがいします。

[code]

    <ul class="m-stockInfo_detail_list">
        <li>
            <span class="m-stockInfo_detail_title">始値 (9:03)</span>
            <span class="m-stockInfo_detail_value">422<span class="m-stockInfo_detail_unit"> 円</span></span>
        </li>
        <li>
            <span class="m-stockInfo_detail_title">高値 (9:03)</span>
            <span class="m-stockInfo_detail_value">422<span class="m-stockInfo_detail_unit"> 円</span></span>
        </li>
        <li>
            <span class="m-stockInfo_detail_title">安値 (14:05)</span>
            <span class="m-stockInfo_detail_value">399<span class="m-stockInfo_detail_unit"> 円</span></span>
        </li>
    </ul>
    
[/code]

使っているモジュール

> import urllib2 from bs4  
>  import BeautifulSoup


CC BY-SA 4.0
2018-09-15T13:24:42.167
48430
2018-09-16T09:49:39.983
2018-09-15T15:57:13.953
19110
question
python python3 web-scraping
深層に対するスクレイピングがうまくいかない Python


# この回答では解決しません - [新しい回答](https://ja.stackoverflow.com/a/48453/29826)をご参照ください

### 古い回答

以下のようなCSSセレクタで各要素の値を取得できました。比較的新しいBeautifulSoupではそのままCSSセレクタが使えるはずなので、以下そのまま利用して取得できると存じます。

[code]

    #JSID_stockInfo > div.m-stockInfo_top > div.m-stockInfo_top_left > div.m-stockInfo_detail.m-stockInfo_detail_01 > div.m-stockInfo_detail_left > ul > li:nth-child(1) > span.m-stockInfo_detail_value
    
[/code]

途中の`li:nth-child`の値を変更すると始値、高値、安値も取得できます。


CC BY-SA 4.0
2018-09-15T14:19:42.080
48434
2018-09-16T09:49:39.983
2018-09-16T09:49:39.983
29826
29826
48430
answer


### 新しい回答（動作確認済み）

`nth-child`を使わず、一旦複数の近い要素をリストとして要素したあとに、それぞれの項目をよしなに扱うことで適切に取得できるようです。

[code]

    import requests
    from bs4 import BeautifulSoup
    url = 'https://www.nikkei.com/nkd/company/?scode=3911'
    html = requests.get(url)
    soup = BeautifulSoup(html.text, "html.parser")
    detail_values = soup.select("#JSID_stockInfo > div.m-stockInfo_top > div.m-stockInfo_top_left > div.m-stockInfo_detail.m-stockInfo_detail_01 > div.m-stockInfo_detail_left > ul > li > span.m-stockInfo_detail_value")
    for dv in detail_values:
        print(dv.text)
    
[/code]

* * *

### [以前の回答](https://ja.stackoverflow.com/a/48434/29826)について

ブラウザ上で取得できるのを確認したため、てっきり普通に取得できるものと考えていたのですが、実はBeautifulSoupでは疑似クラスの実装が完全ではなく（`nth-
child`が未実装なので）、`li:nth-child(1)`で以下のエラーが出るため上記のクエリを利用しても取得できないことが判明しました。

> NotImplementedError: Only the following pseudo-classes are implemented: nth-
> of-type.

謹んでお詫び申し上げます。


CC BY-SA 4.0
2018-09-16T09:31:55.837
48453
2018-09-16T09:47:55.333
2018-09-16T09:47:55.333
29826
29826
48430
answer