您好:参考书本架构大致如下Ch8_4_2\\spiders\\ pttnba.py class PttnbaSpiderCh8_4_2\\items.py class NBAItemCh8_4_2\\pipelines.py class PttPipelineCh8_4_2\\settings.py "Ch8_4_2.pipelines.PttPipeline": 300

请问,我执行scrapy crawl pttnba -o pttnba.jsonPttnbaSpider 如何知道要对应 使用 class PttPipeline(因为目前只有一个 Pipeline,要是有多个?)就前面名称没有对应 ,有settings.py 有设定 pipelines.py但 PttnbaSpider 没看到有对应到要用class PttPipeline

谢谢

相关程式码如下

class NBAItem(scrapy.Item):
#定义Item栏位
title= scrapy.Field();
vote= scrapy.Field();
author =scrapy.Field();
#pass

import scrapy
from Ch8_4_2.items import NBAItem #前一步骤建立的

class PttnbaSpider(scrapy.Spider):
name = "pttnba"
allowed_domains = ["ptt.cc"]
start_urls = [\'https://www.ptt.cc/bbs/NBA/index.html\']

def parse(self, response):
for sel in response.css(".r-ent"):
item = NBAItem()
item["title"] = sel.css("div.title > a::text").extract_first()
item["vote"] = \\
sel.xpath("./div[@class=\'nrec\']/span/text()").extract_first()
item["author"] = \\
sel.xpath("./div[@class=\'meta\']/div[1]/text()").extract_first()
yield item

from scrapy.exceptions import DropItem

class PttPipeline(object):
def process_item(self, item, spider):
if item["vote"]:
if item["vote"]=="爆":
item["vote"]=500
else:
item["vote"]= int( item["vote"] ) + 5
return item

else:
raise DropItem("没有推文数:%s" % item) #丢出例外

ITEM_PIPELINES = {
"Ch8_4_2.pipelines.PttPipeline": 300,
}

1 个回答

0

huangsb

iT邦好手 1 级 ‧ 2024-11-17 12:45:17

您好!在 Scrapy 中,PttnbaSpider 如何知道要使用 PttPipeline 是透过 settings.py 文件中的 ITEM_PIPELINES 设定来实现的。这个设定告诉 Scrapy 在处理 item 时应该使用哪些 pipelines 以及它们的顺序。

在您的 settings.py 文件中,您已经定义了:

ITEM_PIPELINES = {
    "Ch8_4_2.pipelines.PttPipeline": 300,
}

这表示 Scrapy 会使用 Ch8_4_2.pipelines.PttPipeline 来处理 item,并且它的优先级是 300。这个设定会自动应用到所有的 spiders,包括 PttnbaSpider

如果有多个 pipelines,您可以在 ITEM_PIPELINES 中添加更多的条目,每个条目对应一个 pipeline,并且可以设定不同的优先级。例如:

ITEM_PIPELINES = {
    "Ch8_4_2.pipelines.PttPipeline": 300,
    "Ch8_4_2.pipelines.AnotherPipeline": 400,
}

这样,Scrapy 会先使用 PttPipeline 处理 item,然后再使用 AnotherPipeline


  • 1

noway

iT邦研究生 1 级 ‧
2024-11-18 21:53:03

您好:
不好意思,我没说清楚
目前我的点在于
若我今天
Ch8_4_2\\spiders\\ pttnba.py class PttnbaSpider
Ch8_4_2\\spiders\\ pttMLB.py class PttMLBSpider

Ch8_4_2\\items.py class NBAItem
Ch8_4_2\\items.py class MLBItem

Ch8_4_2\\pipelines.py class PttPipeline
Ch8_4_2\\settings.py "Ch8_4_2.pipelines.PttPipeline": 300

有两个程式
要程式要如何对应PIPELINE?
谢谢

修改