gpt4 book ai didi

scrapy - 是不是scrapy可以直接使用Phantomjs下载页面源来渲染?

转载 作者:行者123 更新时间:2023-12-01 15:19:42 25 4
gpt4 key购买 nike

在我的自定义下载器中间件中:

    def process_request(self, request, spider):
if spider.name == 'UrlSpider':
res = requests.get(request.url)
return HtmlResponse(request.url, body=res.content, encoding='utf-8', request=request)
我想在def process_response中渲染response.body,我该怎么办?

最佳答案

有一个 scrapy 中间件可以做到这一点:它将通过 PhantomJS 运行您的请求,并且您的响应将包含呈现的 html。

你可以在这里找到它,它对我来说效果很好(尽管它的作者说它没有经过很好的测试):https://github.com/brandicted/scrapy-webdriver

如果你没有绑定(bind)到 PhantomJS,你也可以看看 https://github.com/scrapy-plugins/scrapy-splash因为这更好地维护(由开发scrapy的同一个人)。

更新

如果你只想通过 PhantomJS 抓取一些页面,我看到了两种可能的方法:

  • 最有可能做一些 Javascript 魔术来从您的 response.body 注入(inject) html。进入 PhantomJS 并使其呈现此页面。

  • 这正是您想要的,但要做到这一点可能有点困难。 (一直在用 PhantomJS 做一些 Javascript 魔术,但它通常不像我希望的那样容易)。
  • 您可以将 PhantomJS 下载器与标准中间件并行注册并加载您要第二次渲染的页面,但这次是通过 PhantomJS 下载器。

  • 为此在 settings.py 中激活 PhantomJS 下载器,如下所示。 :
    # note the 'js-' in front of http
    DOWNLOAD_HANDLERS = {
    'js-http': 'scrapy_webdriver.download.WebdriverDownloadHandler',
    'js-https': 'scrapy_webdriver.download.WebdriverDownloadHandler',
    }

    然后在您的 parse 方法中:
    def parse(self, response):
    if should_be_rendered(response):
    phantom_url = response.url.replace("http", "js-http")
    # do the same request again but this time through the WebdriverDownloadHandler
    yield Request(phantom_url, ...)

    关于scrapy - 是不是scrapy可以直接使用Phantomjs下载页面源来渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43647403/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com