40245


スクレイピングをしたいのですが、  
ここのサイトのbodyタグの中身をfindChirdrenで取得したいのですがnoneと表示され取得できません。

[code]

    import requests
    from bs4 import BeautifulSoup
    
        def _get_page(url):
            #r変数に<!DOCTYPE html>から代入する。
            r = requests.get(url)
            #レスポンスコードが200で正常だったら文字列""にして返す。
            r.encoding = r.apparent_encoding
            if r.status_code == 200:
                print(r.text)
                body_soup = BeautifulSoup(r.text, "html.parser").find('body')
                print(body_soup)
    
    
        _get_page('https://www.intel.co.jp/content/www/jp/ja/homepage.html?_ga=2.148658167.1198309579.1498475512-1466255303.1498475512')
    
[/code]

**エラー**

[code]

    Traceback (most recent call last):
      File "/vagrant/test2.py", line 60, in <module>
        _get_page(url)
      File "/vagrant/test2.py", line 56, in _get_page
        for child_tag in body_soup.findChildren():
    AttributeError: 'NoneType' object has no attribute 'findChildren'
    
[/code]

r.textは表示されるのでhtmlは取得できているのですが、bodyタグの中身はnoneと表示され取得できません。  
googleなど他のサイトなどではしっかり取得する事ができます。  
詳しい方ご回答をよろしくお願いします。


CC BY-SA 3.0
2017-12-10T07:55:03.357
40165
2018-07-20T07:48:24.887
2018-07-20T07:48:24.887
19110
22565
question
python html python3 beautifulsoup
beautifulsoupでbodyタグの中身が取得できない


上記プログラムで取得しているページ( <https://www.intel.co.jp/content/www/jp/ja/homepage.html>
)のステータスコードが304なので、if文で弾かれているためです。


CC BY-SA 3.0
2017-12-12T03:08:22.973
40204
2017-12-12T03:08:22.973
7232
40165
answer


簡易パーザーである`html.parser`ではパーズに失敗してまともに読み込めないぐらい、元のhtmlの構造が複雑 もしくは 壊れているということです。  
環境によっては難しいかもしれませんが、`lxml`を指定すると動くことは動く(*)ので可能なら`lxml`を使うべきです。

(*)htmlの構造がおかしいので、その影響はありますが。

[code]

    import requests
    from bs4 import BeautifulSoup
    
    def _get_page(url):
        #r変数に<!DOCTYPE html>から代入する。
        r = requests.get(url)
        #レスポンスコードが200で正常だったら文字列""にして返す。
        r.encoding = r.apparent_encoding
        if r.status_code == 200:
            return BeautifulSoup(r.text, "lxml").find('body')
    
    _get_page('https://www.intel.co.jp/content/www/jp/ja/homepage.html?_ga=2.148658167.1198309579.1498475512-1466255303.1498475512')
    
[/code]

REPLでの結果

[code]

    <body><div class="clientcontext parbase"><script type="text/javascript">
        $CQ(function() {
            CQ_Analytics.SegmentMgr.loadSegments("\/etc\/segmentation");
            CQ_Analytics.ClientContextUtils.init("\/etc\/clientcontext\/intel", "\/content\/www\/jp\/ja\/homepage");
    
    
        });
    </script>
    </div>
    <div class="analytics">
    </div>
    <!--[if lt IE 9]>
        <link rel="stylesheet" href="/etc/designs/intel/clientlibs/pages/commons-page-ieOverrides.min.css" type="text/css">
    
        <![endif]-->
    <link href="/etc/designs/intel/jp/ja/css/intel.rwd.override.css" rel="stylesheet" type="text/css"/>
    <!--[if lt IE 9]>
        <script type="text/javascript" src="/etc/designs/intel/clientlibs/pages/commons-page-ieOverrides.min.js"></script>
    
        <![endif]-->
    <script type="text/javascript">
        var isTargetEnabled=false;
    </script>
    （略)
    
[/code]


CC BY-SA 3.0
2017-12-13T08:10:02.313
40245
2017-12-13T08:10:02.313
12274
40165
answer