scrapy-splashでレンダリング後のhtmlを取得する設定

Python

概要

  • 某競馬サイトのデータをスクレイピングしようとしたが404がでていた。
  • scrapy-splashの公式のコードをコピペしても、javascript動作後のhtmlが取得できない。

SplashRequest:endpoint=’render.json’

NG
  • 公式だとこんな感じで書いている。
  • でも、start_requestsがこのままだと、レンダリングしたHTMLを取得できていないっぽかった。
import scrapy
from scrapy_splash import SplashRequest

class MySpider(scrapy.Spider):
    start_urls = ["http://example.com", "http://example.com/foo"]

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse, args={'wait': 0.5})

    def parse(self, response):
        # response.body is a result of render.html call; it
        # contains HTML processed by a browser.
        # ...

解決方法: endpoint=’render.html’

OK
import scrapy
from scrapy_splash import SplashRequest

class MySpider(scrapy.Spider):
    start_urls = ["http://example.com", "http://example.com/foo"]

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse, endpoint='render.html',args={'wait': 0.5})

    def parse(self, response):
        # response.body is a result of render.html call; it
        # contains HTML processed by a browser.
        # ...
  • endpointを指定してあげることで、無事取得することができた。
  • ちなみに、endpointはデフォルトだと’render.json’になっているらしい。
  • scrapyを理解しながら進めているわけではないので、なぜrender.jsonでだめだったのか確認する必要はある。

コメント

タイトルとURLをコピーしました