限制检索到的物品被刮擦

时间:2019-12-01 23:34:51

标签: python scrapy

首先,我想提一提我是一名学生,并且在这方面知识不多。

我正在尝试使用scrapy创建Web搜寻器的Python演练。

工作正常,但要求之一是我只检索前10个项目,即使使用自定义设置也无法实现:

custom_settings = {
    'CONCURRENT_REQUESTS': 1,
    'CONCURRENT_ITEMS' :1,
    'CLOSESPIDER_PAGECOUNT': 1,
    'CLOSESPIDER_ITEMCOUNT': 10
}

您能帮我找到解决方案吗?

谢谢!

代码:

import scrapy 
from scrapy.crawler import CrawlerProcess

class sjr_spider(scrapy.Spider):

    name = "sjr_spider"

    start_urls = [
        "https://www.scimagojr.com/journalrank.php?year=2017&area=1700"
    ]

    custom_settings = {
        'CONCURRENT_REQUESTS': 1,
        'CONCURRENT_ITEMS' :1,
        'CLOSESPIDER_PAGECOUNT': 1,
        'CLOSESPIDER_ITEMCOUNT': 10
    }

    def parse(self, response):

        for journal in response.xpath('//td[@class="tit"]/a/text()'):
            yield {
                'title': journal.extract()
            }
if __name__ == "__main__":

    process = CrawlerProcess({
        'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)',
        'DOWNLOAD_HANDLERS': {'s3': None},
         'LOG_ENABLED': True,

    })

    process.crawl(sjr_spider)
    process.start()

1 个答案:

答案 0 :(得分:0)

正如Stan在评论中指出的那样,您的设置导致蜘蛛程序停止,但在蜘蛛程序停止之前,它会处理队列中的请求。

如果您确实需要丢弃超过10个项目,可以create an item pipeline执行。它可以计数项目,也可以在10号之后删除任何项目。

不过,您仍然应该保持ITEM_CLOSESPIDER的设置,以确保第10个项目之后蜘蛛开始停止