解析Scrap Splash的输出

时间:2019-06-20 18:52:00

标签: python scrapy scrapy-splash

enter image description here

我正在测试https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splashhttps://aaqai.me/notes/scrapy-splash-setup之后的scrapy 1.6的启动实例。我的蜘蛛:

import scrapy
from scrapy_splash import SplashRequest
from scrapy.utils.response import open_in_browser

class MySpider(scrapy.Spider):
    start_urls = ["http://yahoo.com"]
    name = 'mytest'

    def start_requests(self):
        for url in self.start_urls:
            yield SplashRequest(url, self.parse, endpoint='render.html', args={'wait': 7.5},)

    def parse(self, response):
        # response.body is a result of render.html call; it
        # contains HTML processed by a browser.
        open_in_browser(response)
        return None

输出将在记事本而不是浏览器中打开。如何在浏览器中打开它?

1 个答案:

答案 0 :(得分:2)

如果您使用的是启动中间件,则启动响应将进入常规响应对象,您可以通过response.css和response.xpath进行访问。根据您使用的端点,您可以执行JavaScript和其他内容。

如果需要在页面和其他内容之间移动,则需要编写LUA脚本以使用适当的端点执行。就解析输出而言,它会自动进入响应对象。

摆脱open_in_browser我不确定您在做什么,但是如果您只想解析页面,您可以这样做

body = response.css('body').extract_first()
links = response.css('a::attr(href)').extract()

如果可以,请澄清您的问题,大多数人都不想在链接中尝试并猜测您遇到的问题。

已更新的问题解答:

听起来您可能希望Splash外壳具有Splash,这将使您能够尝试选择器:

scrapy shell 'http://localhost:8050/render.html?url=http://page.html&timeout=10&wait=0.5'

要访问浏览器实例中的Splash,只需转到http://0.0.0.0:8050/,然后在其中输入URL。我不确定教程中的方法,但这是您如何与Splash会话进行交互。