gpt4 book ai didi

python - Scrapy:在输出中保留抓取项目的原始顺序

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:22 27 4
gpt4 key购买 nike

我有以下 Scrapy 蜘蛛从文件 url.txt 中的 url 列表中获取页面的状态

import scrapy
from scrapy.contrib.spiders import CrawlSpider
from pegasLinks.items import StatusLinkItem

class FindErrorsSpider(CrawlSpider):
handle_httpstatus_list = [404,400,401,500]
name = "findErrors"

allowed_domains = ["domain-name.com"]
f = open("urls.txt")
start_urls = [url.strip() for url in f.readlines()]
f.close()

def parse(self, response):
item = StatusLinkItem()
item['url'] = response.url
item['status'] = response.status
yield item

这是我的 items.py 文件:

import scrapy

class StatusLinkItem(scrapy.Item):
url = scrapy.Field()
status = scrapy.Field()

我使用以下命令获取 CSV 格式的项目输出:

scrapy crawl findErrors -o File.csv

输出文件中的项目顺序与 urls.txt 文件中相应 url 的顺序不同。我怎样才能保留原始订单或使用某种全局变量向 items.py 添加另一个字段,该变量将代表 url 的 id,我以后可以用它恢复原始订单?

最佳答案

您不能依赖 start_urls 中的顺序或 url。

您可以执行以下操作。覆盖 start_requests在你的蜘蛛中添加类似 index 参数的方法到 meta创建的 Request 对象中的字典。

def start_requests(self):
for index, url in enumerate(self.start_urls):
yield Request(url, dont_filter=True, meta={'index': index})

稍后您可以使用 response.metaparse 函数中访问 meta .

关于python - Scrapy:在输出中保留抓取项目的原始顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30189626/

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