python - 限制scrapy可以收集的元素数量

标签 python web-scraping web-crawler scrapy

我正在使用 scrapy 来收集一些数据。我的 scrapy 程序在一次 session 中收集 100 个元素。我需要将其限制为 50 或任何随机数。我怎样才能做到这一点?欢迎任何解决方案。提前致谢

# -*- coding: utf-8 -*-
import re
import scrapy


class DmozItem(scrapy.Item):
    # define the fields for your item here like:
    link = scrapy.Field()
    attr = scrapy.Field()
    title = scrapy.Field()
    tag = scrapy.Field()


class DmozSpider(scrapy.Spider):
    name = "dmoz"
    allowed_domains = ["raleigh.craigslist.org"]
    start_urls = [
        "http://raleigh.craigslist.org/search/bab"
    ]

    BASE_URL = 'http://raleigh.craigslist.org/'

    def parse(self, response):
        links = response.xpath('//a[@class="hdrlnk"]/@href').extract()
        for link in links:
            absolute_url = self.BASE_URL + link
            yield scrapy.Request(absolute_url, callback=self.parse_attr)

    def parse_attr(self, response):
        match = re.search(r"(\w+)\.html", response.url)
        if match:
            item_id = match.group(1)
            url = self.BASE_URL + "reply/ral/bab/" + item_id

            item = DmozItem()
            item["link"] = response.url
            item["title"] = "".join(response.xpath("//span[@class='postingtitletext']//text()").extract())
            item["tag"] = "".join(response.xpath("//p[@class='attrgroup']/span/b/text()").extract()[0])
            return scrapy.Request(url, meta={'item': item}, callback=self.parse_contact)

    def parse_contact(self, response):
        item = response.meta['item']
        item["attr"] = "".join(response.xpath("//div[@class='anonemail']//text()").extract())
        return item

最佳答案

这就是 CloseSpider extensionCLOSESPIDER_ITEMCOUNT 设置的目的是:

An integer which specifies a number of items. If the spider scrapes more than that amount if items and those items are passed by the item pipeline, the spider will be closed with the reason closespider_itemcount. If zero (or non set), spiders won’t be closed by number of passed items.

关于python - 限制scrapy可以收集的元素数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941333/

相关文章:

web-scraping - 当我不想处理所有404错误时,如何在Scrapy中返回404错误?

javascript - NodeJS爬虫未定义不是函数

python - 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

python - 如何根据单个scrapy.Spider的不同命令设置不同的IP?

python - 使用 Selenium/Splinter 抓取延迟的 ajax

python - 字符串的快速串联

python - 两个相同的 AutomationID 使用 xpath python 和 appium

python - 如何使用 Python 在指定的 delims 之后查找和替换/删除文本?

python - 当 y_pred 和 y_true 具有不同大小时的 precision 、 recall 、 f 分数

javascript - 抓取 ajax 加载内容中的值会导致白页