您好:参考书本架构大致如下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?
谢谢
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?
谢谢
修改