我最近决定尝试使用 Scrapy-Splash 插件,但是 Splash 无法呈现该网站 http://orka.sejm.gov.pl/proc6.nsf/
# -*- 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
所以结果是这样的:
['<html><head>\n<title>Proces Legislacyjny 6 kadencja</title>\n<script language="JavaScript" type="text/javascript">\n<!-- \nself._domino_name = "_Main";\n// -->\n</script>\n</head>\n\n<frameset frameborder="0" border="0" cols="169,1*">\n\n<frame frameborder="0" noresize name="Left" src="/proc6.nsf/start?OpenPage&BaseTarget=Main">\n\n<frameset frameborder="0" rows="70,1*">\n\n<frame frameborder="0" noresize scrolling="no" name="Maintop" src="/proc6.nsf/pgHeader?OpenPage">\n\n<frame frameborder="0" noresize name="Main" src="/proc6.nsf/Przebieg%20procesu%20legislacyjnego%20-%20projekty%20ustaw?OpenView">\n</frameset>\n</frameset>\n\n</html>']
很明显,您可以看到这与您使用常规浏览器访问该网站时不同。没有表格数据和链接以及漂亮的标签。
Scrapy-Splash 遗漏了一些东西。
最佳答案
Splash 正确地呈现页面,但您使用的是 render.html,它返回主页的 html,而不是其中的框架。在这种情况下,您需要使用 render.json 并将 iframe
设置为 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
关于javascript - scrapy-splash 无法呈现此页面 - 未呈现动态内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46055871/