相关疑难解决方法(0)

Scrapy - 如何识别已经刮过的网址

我每天都使用scrapy来抓取新闻网站.我如何限制scrapy刮掉已经删除的URL.还有任何明确的文档或示例SgmlLinkExtractor.

python web-crawler scrapy

14
推荐指数
2
解决办法
8361
查看次数

在满足管道中的条件后,如何立即停止所有蜘蛛和引擎?

我们有一个用scrapy编写的系统来抓取一些网站.有几个蜘蛛,以及所有爬虫传递的所有物品的一些级联管道.其中一个管道组件向Google服务器查询地理编码地址.谷歌每个IP地址每天限制2500个请求,并且如果谷歌继续查询谷歌,即使谷歌已经回复了警告信息:'OVER_QUERY_LIMIT',也有可能禁止IP地址.

因此,我想知道我可以在管道中调用的任何机制,它将完全并立即停止所有进一步爬行/处理所有蜘蛛以及主引擎.

我检查了其他类似的问题,他们的答案没有奏效:

from scrapy.project import crawler
crawler._signal_shutdown(9,0) #Run this if the cnxn fails.
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为蜘蛛停止执行需要时间,因此谷歌提出了更多的请求(可能会禁止我的IP地址)

import sys
sys.exit("SHUT DOWN EVERYTHING!")
Run Code Online (Sandbox Code Playgroud)

这个根本不起作用; 项目不断生成并传递给管道,虽然日志呕吐sys.exit() - > exceptions.SystemExit引发(无效)

crawler.engine.close_spider(self, 'log message')
Run Code Online (Sandbox Code Playgroud)

这个问题与上面提到的第一种情况有同样的问题.

我试过了:

scrapy.project.crawler.engine.stop()
Run Code Online (Sandbox Code Playgroud)

无济于事

编辑:如果我在管道中:

来自scrapy.contrib.closespider导入CloseSpider

我应该将什么作为'crawler'参数从我的管道范围传递给CloseSpider的init()?

python web-crawler scrapy

12
推荐指数
1
解决办法
6615
查看次数

如果满足条件,则终止Scrapy

我在python中使用scrapy编写了一个刮刀.它包含100个start_urls.

我想在条件满足后终止刮擦过程.即找到终止特定div的刮擦.终止我的意思是它应该停止刮掉所有网址.

可能吗

python scrapy

5
推荐指数
1
解决办法
1665
查看次数

如何停止scrapy爬虫

如果满足某些条件我想停止蜘蛛我试着这样做: raise CloseSpider('Some Text')

sys.exit("SHUT DOWN EVERYTHING!")
Run Code Online (Sandbox Code Playgroud)

但它并没有停止.这是代码编写引发异常而不是返回也不会工作,因为蜘蛛继续爬行:

import scrapy
from scrapy.http import Request

from tutorial.items import DmozItem
from scrapy.exceptions import CloseSpider
import sys

class DmozSpider(scrapy.Spider):
    name = "tutorial"
    allowed_domain = ["jabong.com"]
    start_urls = [
            "http://www.jabong.com/women/shoes/sandals/?page=1"
        ]

    page_index = 1

    def parse(self,response):
        products = response.xpath('//li')

        if products:
            for product in products:
                item = DmozItem()
                item_url = product.xpath('@data-url').extract()
                item_url = "http://www.jabong.com/" + item_url[0] if item_url else ''   
                if item_url:
                        request=Request(url=item_url,callback=self.parse_page2,meta={"item":item},
                                headers={"Accept":
                        "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"})
                    request.meta['item'] = item
                    yield request
        else:
            return

        self.page_index …
Run Code Online (Sandbox Code Playgroud)

python scrapy

1
推荐指数
1
解决办法
3344
查看次数

标签 统计

python ×4

scrapy ×4

web-crawler ×2