Pythonでスクレイピング時にJavaScriptが必要か調べる

requests-htmlをインストール

pip install requests-html

使い方

  1. 下のプログラムにURLとCSSまたはXPATHを入力
  2. 実行
  3. 結果
  4. 01_base.htmlと02_java.htmlのファイル作成

通常

XX件 見つかりました 該当タグ表示

※beautifulsoup, scrapyでスクレイピングできます

JavaScriptが必要な場合

Javascriptレンダリングにより

XX件 見つかりました

※requests-html, selenium, scrapy-splashでJavascriptレンダリングが必要

該当タグ表示

見つからない場合

見つかりません。セレクタをご確認ください。

プログラム

from requests_html import HTMLSession

# URLを入力
url = 'http://www.example.com/'

# CSSまたはXPATHセレクタを入力
css = ''
xpath = ''


def view(data):

    for i in data:

        print(i.html)


def check(message, base, java):

    base_cnt = len(base)
    java_cnt = len(java)

    if base_cnt > 0:

        print(message, base_cnt, '件 見つかりました')
        view(base)

    elif java_cnt > 0:

        print('Javascriptのレンダリングにより')
        print(message, java_cnt, '件 見つかりました')
        print('※requests-html, selenium, scrapy-splashでスクレイピングしてください')
        view(java)

    else:

        print(message, '見つかりません。セレクタをご確認ください。')


if __name__ == '__main__':

    session = HTMLSession()
    r = session.get(url)

    with open('01_base.html', mode='w', encoding='utf-8') as fw:
        fw.write(r.html.html)

    # CSSセレクタ
    if css:

        base_css = r.html.find(css)

    # XPATH
    if xpath:

        base_xpath = r.html.xpath(xpath)

    # Javascriptレンダリング
    r.html.render()

    with open('02_java.html', mode='w', encoding='utf-8') as fw:
        fw.write(r.html.html)

    # CSSセレクタ
    if css:

        java_css = r.html.find(css)
        check('CSS', base_css, java_css)

    # XPATH
    if xpath:

        java_xpath = r.html.xpath(xpath)
        check('XPATH', base_xpath, java_xpath)