iT邦幫忙

0

python scrapy pipeline實作問題請教

  • 分享至 

  • xImage

您好:
參考書本
架構大致如下
Ch8_4_2\spiders\ pttnba.py class PttnbaSpider
Ch8_4_2\items.py class NBAItem
Ch8_4_2\pipelines.py class PttPipeline
Ch8_4_2\settings.py "Ch8_4_2.pipelines.PttPipeline": 300

請問,我執行scrapy crawl pttnba -o pttnba.json
PttnbaSpider 如何知道要對應 使用 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,
}

froce iT邦大師 1 級 ‧ 2024-11-18 09:54:52 檢舉
Ch8_4_2.pipelines.PttPipeline
這串和你的資料夾結構以及PttPipeline去比對你就知道了。
你書一定有跟你說前面是用來引入,後面是pipeline的優先權。
既然是引入,那你一定得在程式指明怎麼引入,這邊的key就是告訴程式如何引入
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

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

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?
謝謝

我要發表回答

立即登入回答