javascript - scrapy-splash 无法呈现此页面 - 未呈现动态内容?

标签 javascript python scrapy splash-screen

我最近决定尝试使用 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&amp;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

Splash Response

关于javascript - scrapy-splash 无法呈现此页面 - 未呈现动态内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46055871/

相关文章:

javascript - 在客户端渲染 html 的技巧

javascript - 在 React.js 中使导入的对象具有反应性

Python - 如何解码 JWT header ?

javascript - Scrapy 和 Xpath 从 JavaScript 代码中提取数据

python - 如何知道scrapy规则提取了哪些链接

javascript - 同一页面中多个组件的 Vue JS Spinner(单个应用程序)

javascript - Cypress对象与JQuery对象,cy.wrap函数的作用

python - 在python中使Eratosthenes筛分更有效的内存?

python - 属性错误: when trying to write in form xml

scrapy - 如何以json格式存储scrapyd项目