首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scrapy-splash不使用CrawlerSpider递归抓取

scrapy-splash不使用CrawlerSpider递归抓取
EN

Stack Overflow用户
提问于 2016-11-14 17:16:15
回答 1查看 451关注 0票数 1

我在我的CrawlerSpider process_request中集成了scrapy splash,规则如下:

代码语言:javascript
复制
 def process_request(self,request):
    request.meta['splash']={
        'args': {
            # set rendering arguments here
            'html': 1,
        }
    }
    return request

问题是爬虫只呈现第一深度中的urls,我也想知道如何才能获得响应,即使是糟糕的http代码或重定向的重定向响应;

提前谢谢你,

EN

回答 1

Stack Overflow用户

发布于 2017-08-31 09:08:07

您的问题可能与此有关:https://github.com/scrapy-plugins/scrapy-splash/issues/92

简而言之,尝试将以下代码添加到解析回调函数中:

代码语言:javascript
复制
def parse_item(self, response):
    """Parse response into item also create new requests."""

    page = RescrapItem()
    ...
    yield page

    if isinstance(response, (HtmlResponse, SplashTextResponse)):
        seen = set()
        for n, rule in enumerate(self._rules):
            links = [lnk for lnk in rule.link_extractor.extract_links(response)
                     if lnk not in seen]
            if links and rule.process_links:
                links = rule.process_links(links)
            for link in links:
                seen.add(link)
                r = SplashRequest(url=link.url, callback=self._response_downloaded, 
                                              args=SPLASH_RENDER_ARGS)
                r.meta.update(rule=rule, link_text=link.text)
                yield rule.process_request(r)

以防万一,您可能想知道为什么这会同时返回项目和新请求。下面是文档:https://doc.scrapy.org/en/latest/topics/spiders.html

在回调函数中,解析响应(网页)并返回包含提取数据的字典、Item对象、请求对象或这些对象的可迭代。这些请求还将包含一个回调(可能相同),然后由Scrapy下载,然后由指定的回调处理它们的响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40585219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档