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

时间:2017-09-05 13:11:31

标签: javascript python scrapy splash

我最近决定尝试使用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缺少一些东西。

1 个答案:

答案 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

Splash Response