我最近决定尝试使用Scrapy-Splash插件,但是Splash无法呈现此网站http://orka.sejm.gov.pl/proc6.nsf/
LineCollection
所以结果是这样的:
# -*- coding: utf-8 -*-
import scrapy
from scrapy_splash import SplashRequest
class BasicSpider(scrapy.Spider):
name = 'basic'
start_urls = ['http://orka.sejm.gov.pl/proc6.nsf/']
def start_requests(self):
for url in self.start_urls:
yield SplashRequest(url, callback=self.parse,
endpoint='render.html',
args={'wait': 20},)
def parse(self, response):
item = {}
item["data"] = response.xpath('//html').extract()
return item
显然,您可以看到这与使用常规浏览器访问网站时的情况不同。没有表格数据,链接和漂亮的标签。
Scrapy-Splash缺少一些东西。
答案 0 :(得分:1)
Splash正确呈现页面,但您使用的是render.html,它返回主页面的html而不是其中的框架。在这种情况下,您需要使用render.json,并将iframes
设置为1。
有关详细信息,请参阅以下问题
https://github.com/scrapinghub/splash/issues/413
修改-1 强>
我在页面上运行了下面的Lua脚本,它给了我所有帧的内容
function main(splash, args)
assert(splash:go(args.url))
assert(splash:wait(5))
local getFramesHtml = splash:jsfunc([[
function test() {
var data = [];
for (var i = 0 ; i < window.frames.length; i++)
{
data.push(window.frames[i].document.documentElement.outerHTML);
}
return data;
}
]]);
return {
html = splash:html(),
frames = getFramesHtml()
}
end