一、ItemItem是把非規(guī)范化的東西進行規(guī)范化, Item類就用來規(guī)定數(shù)據(jù)的字段結(jié)構(gòu)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁 > 營銷資訊 > 網(wǎng)站運營 > 第三章 第一節(jié) Item與Pipeline

第三章 第一節(jié) Item與Pipeline

時間:2023-06-03 14:00:01 | 來源:網(wǎng)站運營

時間:2023-06-03 14:00:01 來源:網(wǎng)站運營

第三章 第一節(jié) Item與Pipeline:如果覺得文章對您產(chǎn)生幫助的話, 歡迎關(guān)注Python開發(fā)之路(微信公眾號: python-developer), 獲取更多教程

一、Item

Item是把非規(guī)范化的東西進行規(guī)范化, Item類就用來規(guī)定數(shù)據(jù)的字段結(jié)構(gòu)

import scrapyclass ArticleItem(scrapy.Item): title = scrapy.Field() url = scrapy.Field() content = scrapy.Field()Item類繼承的dict類型, 所以操作的方法和dict是一樣的

item = ArticleItem()item['title'] = '這是一個文章的標題'item['url'] = 'http://www.baidu.com'# 獲取一個item的值item.get('title')# 修改item的值item['title'] = '這是修改后的標題'# 獲取所有的keyitem.keys()# 從dict中創(chuàng)建一個itemArticle({'title': '這是另外一個標題', 'url': 'http://www.qq.com'})# 判斷key是否存在'title' in item# 復(fù)制一個itemitem.copy()

二、Pipeline

1. pipeline的基本使用

Pipeline 可以負責(zé)數(shù)據(jù)的清洗, 去重, 以及item的一些處理, 以及存儲

Pipeline類含有的方法

process_item(self, item, spider)
每個item被傳入pipeline后的實際處理類, item是傳入的item, spider是指產(chǎn)生item的爬蟲
open_spider(self, spider)
當(dāng)指定的爬蟲啟動的時候被執(zhí)行到的方法
spider: 被啟動的爬蟲
close_spider(self, spider)
當(dāng)爬蟲被關(guān)閉的時候調(diào)用的方法
spider: 被關(guān)閉的爬蟲
from_crawler(cls, crawler)
當(dāng)pipeline類被創(chuàng)建的時候調(diào)用的方法
現(xiàn)在可以查看一個pipeline的例子

from scrapy.exceptions import DropItemclass ArticlePipeline(object): def process_item(self, item, spider): if 'title' not in item: raise DropItem('Missing title in %s' item) else: # 存入數(shù)據(jù)庫或者別的處理 return item # return item供別的pipeline繼續(xù)處理 def open_spider(self, spider): spider.logger.info('pipeline被創(chuàng)建了!') def close_spider(self, spider): spider.logger.info('pipeline被關(guān)閉了')

2. 將pipeline配置進爬蟲

在settings.py中

ITEM_PIPELINES = { 'testSpider.pipelines.ArticlePipeline': 300,}前面是指向pipeline的模塊路徑, 后面的300是優(yōu)先級, 執(zhí)行順序是優(yōu)先級從小到大。 所以當(dāng)item產(chǎn)生的時候, 也是從較低的pipeline類中處理, 如果有return item, 則會繼續(xù)在較高的pipeline中繼續(xù)執(zhí)行, 直到完畢。

三、Item和Pipeline結(jié)合的例子

這個例子我們抓取http://www.ccidcom.com這個網(wǎng)站,
抓取鏈接是http://www.ccidcom.com/yaowen/index.html

1. 編寫Item規(guī)則

# items.pyimport scrapyclass ArticleItem(scrapy.Item): title = scrapy.Field() url = scrapy.Field()

2. 編寫pipeline

我們編寫輸出傳遞到pipeline的item, 并且過濾重復(fù)的item

# pipelines.py# -*- coding: utf-8 -*-from scrapy.exceptions import DropItemclass ArticlePipeline(object): def __init__(self): self.title_sets = set() def process_item(self, item, spider): # 標題已存在, 則忽略, 否則輸出 if item['title'] in self.title_sets: raise DropItem('重復(fù)的標題: %s' % item['title']) else: self.title_sets.add(item['title']) # 這里可以換成保存到數(shù)據(jù)庫的方法 print(item) return item def open_spider(self, spider): spider.logger.info('pipeline被啟動了!!!') def close_spider(self, spider): spider.logger.info('pipeline被關(guān)閉了?。?!')現(xiàn)在將編寫好的pipeline加入到settings.py文件

# settings.pyITEM_PIPELINES = { 'ccidcom.pipelines.ArticlePipeline': 300,}

3. 編寫spider

# -*- coding: utf-8 -*-import scrapyfrom ccidcom.items import ArticleItemclass CcidcomspiderSpider(scrapy.Spider): name = 'ccidcomSpider' allowed_domains = ['ccidcom.com'] def start_requests(self): yield scrapy.Request('http://www.ccidcom.com/yaowen/index.html') def parse(self, response): # 解析獲取到文章列表 article_list = response.css('div.article-item') # 循環(huán)selectorList for info in article_list: # 聲明一個item對象 item = ArticleItem() # 解析頁面并且將值賦值給item item['title'] = info.css( 'div.article-cont div.title a font::text').get() item['url'] = info.css( 'div.article-cont div.title a::attr("href")').get() # 將item yield到pipeline中 yield item

4. 運行爬蟲

...# 這是我們開啟的pipeline2019-10-30 21:09:24 [scrapy.middleware] INFO: Enabled item pipelines:['ccidcom.pipelines.ArticlePipeline']# 這是pipeline的open_spider方法輸出的信息2019-10-30 21:09:24 [scrapy.core.engine] INFO: Spider opened2019-10-30 21:09:24 [ccidcomSpider] INFO: pipeline被啟動了!!!...# 以下都是在pipeline的process_item的方法輸出的數(shù)據(jù){'title': '對話河源高新區(qū)黨工委書記、管委會主任孫鋒:向全球手機創(chuàng)新高地邁進', 'url': '/yaowen/20190930/hb5cY2QtjOcUQc2D116xpnpcdg7ok.html'}{'title': '中國移動牽頭完成國際電信聯(lián)盟《IMT-2020及未來網(wǎng)絡(luò)智能化分級》標準', 'url': '/yaowen/20191030/h3OpxsU8p5UtmqwNQ170a1olcrlb0.html'}{'title': '信息通信展:“5G”議題刷屏 將成會議焦點', 'url': '/yaowen/20191029/lmntlfGvVHeE1PbAu1706elooedw4.html'}{'title': '2019中國5G終端創(chuàng)新峰會暨天鵝獎頒獎禮準備就緒,11月6日河源見!', 'url': '/yaowen/20191029/48d9nTli79xvCV4Jy1705qlyzz0b0.html'}{'title': '中興通訊前三季度財報發(fā)布:凈利41.3億元 研發(fā)投入占比14.6%', 'url': '/yaowen/20191028/D38FPmYP3uktcVR5T1703xpvip21o.html'}{'title': '11月6日!2019中國手機設(shè)計最高獎天鵝獎河源揭曉!', 'url': '/yaowen/20191028/feFeeyFbKf1CoFnsi1702sslwodhc.html'}{'title': '直擊七場對接會:“塊狀經(jīng)濟”如何快速駛?cè)牍I(yè)互聯(lián)網(wǎng)', 'url': '/yaowen/20191028/jmmTZgwIsP6Y5ywvl1702qze9ixog.html'}{'title': '李穎:三舉措推動工業(yè)互聯(lián)網(wǎng)平臺發(fā)展', 'url': '/yaowen/20191027/xMxGIGYNR9ecx4z6F1700n0ogf7hk.html'}{'title': '高通孟樸:5G商用前期主要服務(wù)大眾,2020年將有更多手機支持5G', 'url': '/yaowen/20191026/Jm68cP3rhpFcTnJDG16zxnf7bpgjo.html'}{'title': '英特爾2019第三季度財報發(fā)布:營收192億美元超預(yù)期', 'url': '/yaowen/20191025/1o6DjxQS5h9qVZKaY16zv9i7zbbq0.html'}...# 以下都是pipeline的close_spider2019-10-30 21:09:24 [scrapy.core.engine] INFO: Closing spider (finished)2019-10-30 21:09:24 [ccidcomSpider] INFO: pipeline被關(guān)閉了?。。?/code>

關(guān)鍵詞:

74
73
25
news
  • 網(wǎng)站
  • 營銷
  • 設(shè)計
  • 運營
  • 優(yōu)化
  • 效率
  • 專注
  • 電商
  • 方案
  • 推廣
為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點擊下載Chrome瀏覽器
關(guān)閉