解析 scrapy splash 的输出

Parsing output from scrapy splash

我正在 https://blog.scrapinghub.com/2015/03/02/handling-javascript-in-scrapy-with-splash and https://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

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

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

如果您需要在页面上移动和执行其他操作,您将需要编写 LUA 脚本以使用正确的端点执行。至于解析输出,它会自动进入响应对象。

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

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

如果你能澄清你的问题,大多数人不想查看链接来尝试猜测你遇到了什么问题。

澄清问题的更新:

听起来您可能想要 scrapy shell 和 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 会话交互的方式。