概要
- 某競馬サイトのデータをスクレイピングしようとしたが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でだめだったのか確認する必要はある。
コメント