亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 20天學會爬蟲之Scrapy管道piplines

20天學會爬蟲之Scrapy管道piplines

來源:千鋒教育
發布人:qyf
時間: 2022-09-20 16:22:13 1663662133

  Item Pipline介紹

  對于Item pipline我們前面已經簡單的使用過了,更加詳細的使用本文給大家一一道來。

  在我們開始學習Item Pipline之前,我們還是來看一下下面這張圖。

Picture

  大家可以看到上圖最左側的就是Item Pipline。Item管道的主要任務就是負責處理有Spider從網頁中抽取的Item,因此Item Pipline的主要任務就是清洗、驗證和存儲數據。 當頁面被Spider解析后,將被發送到Item管道,Item Pipline獲取了Items中的數據并執行對應的方法,并決定是否需要在Item管道中繼續執行下一步或是直接丟棄掉不處理。

  因此對于Item Pipline其主要的作用包括如下:

  • 清理HTML數據。

  • 驗證爬取數據,檢查爬取字段。

  • 查重并丟棄重復內容。

  • 將爬取結果保存到數據庫。

  核心方法介紹

  Item管道主要有4個方法,分別是:

  (1)open_spider(spider)

  (2)close_spider(spider)

  (3)from_crawler(cls,crawler)

  (4)process_item(item,spider)

  open_spider(spider)【參數spider 即被開啟的Spider對象】

  是在開啟spider的時候觸發的,常用于初始化操作(常見的有:開啟數據庫連接,打開文件等)。該方法非必需實現,可以根據需求定義。

  close_spider(spider) 【參數spider 即被關閉的Spider對象】

  是在 Spider 關閉的時候自動調用的,在這里我們可以做一些收尾工作,如關閉數據庫連接等,該方法非必需實現,可以根據需求定義。

  from_crawler(cls,crawler)【參數一:Class類 參數二:crawler對象】

  該方法Spider啟用時調用,比open_spider()方法調用還要早,是一個類方法,用@classmethod標識,是一種依賴注入的方式。它的參數有crawler,通過crawler對象,我們可以拿到Scrapy的所有核心組件,如全局配置的每個信息,然后創建一個Pipeline實例。參數cls就是Class,最后返回一個Class實例。

  process_item(item,spider) 【參數一:被處理的Item對象 參數二:生成該Item的Spider對象】

  該方法是必須要實現的方法,被定義的 Item Pipeline 會默認調用這個方法對 Item 進行處理。比如,我們可以進行數據處理或者將數據寫入到數據庫等操作。它必須返回 Item 類型的值或者拋出一個 DropItem 異常。

  • 如果返回的是 Item 對象,那么此 Item 會接著被低優先級的 Item Pipeline 的 process_item () 方法進行處理,直到所有的方法被調用完畢。

  • 如果拋出的是 DropItem 異常,那么此 Item 就會被丟棄,不再進行處理。

  延伸擴展:ImagesPipline

  爬蟲程序爬取的目標通常不僅僅是文字資源,經常也會爬取圖片資源。這就涉及如何高效下載圖片的問題。這里高效下載指的是既能把圖片完整下載到本地又不會對網站服務器造成壓力。此時你可以不在 pipeline 中自己實現下載圖片邏輯,可以通過 Scrapy 提供的圖片管道ImagesPipeline,這樣可以更加高效的操作下載圖片。

  ImagesPipeline 具有以下特點:

  • 將所有下載的圖片轉換成通用的格式(JPG)和模式(RGB)

  • 避免重新下載最近已經下載過的圖片

  • 縮略圖生成

  • 檢測圖像的寬/高,確保它們滿足最小限制

  使用說明:

  在pipline.py中可以新定義一個類,比如:xxImagePipline,Scrapy 默認生成的類是繼承Object, 要將該類修改為繼承ImagesPipeline。然后實現get_media_requests和item_completed這兩個函數

  其中,get_media_requests函數為每個 url 生成一個 Request。而item_completed(self, results, item, info)當一個單獨項目中的所有圖片請求完成時,該方法會被調用。

  處理結果會以二元組的方式返回給 item_completed() 函數,即參數:results。

  results參數二元組結果是:(success, imageinfoorfailure)

  其中success表示圖片是否下載成功;imageinfoorfailure是一個字典,包含三個屬性:

  url - 圖片下載的url。這是從 getmediarequests() 方法返回請求的url。

  path - 圖片存儲的路徑(類似 IMAGES_STORE)

  checksum - 圖片內容的 MD5 hash

  如果需要file_path(request, response=None, info=None)

  request表示當前下載對應的request對象(request.dict查看屬性),該方法用來返回文件名

  response返回的是None

  info一樣的返回是一個對象(info.dict查看)

  同時需要結合settings.py的配置進行設置,比如設置配置存放圖片的路徑以及自定義下載的圖片管道。

  # 可以避免下載最近已經下載的圖片,90天的圖片失效期限

  IMAGES_EXPIRES = 90

  IMAGES_STORE = '設置存放圖片的路徑'

  # 如果需要也可以設置縮略圖

  # IMAGES_THUMBS = {

  # 'small': (50, 50), # (寬, 高)

  # 'big': (270, 270),

  # }

  # 配置自定義下載的圖片管道, 默認是被注釋的

  ITEM_PIPELINES = {

  # yourproject.middlewares(文件名).middleware類

  '項目名.pipelines.xxImagePipeline': 數值,

  }

  并且Scrapy 框架下載圖片會用到這個Python Imaging Library (PIL)圖片加載庫,所以也要提前安裝好這個庫。

  pip install pillow

  案例

  本次我們爬取的網站是一個有很多治愈系圖片的網站,更加重要的是免費的。鏈接是:http://www.designerspics.com

Picture(1)

  我們要實現的在MongoDB中存儲,圖片的名字和下載地址,并將圖片下載到本地。因為我們前面存儲沒有使用過MongoDB或者Redis等非關系型數據庫,所以本次案例我們使用MongoDB存儲。

  首先新建一個項目,命令如下:

  scrapy startproject designerspics

  接下來新建一個 Spider,命令如下:

  scrapy genspider designer www.designerspics.com

  這樣我們就成功創建了一個 Spider。

  接下來使用PyCharm打開爬蟲項目,開始編寫爬蟲。

Picture(2)

  于是我們的爬蟲代碼就是(當然現在爬取的只是第一頁,如果是多頁爬取則需要重寫start_requests(self)方法):

  import scrapy

  from designerspics.items import DesignerspicsItem

  class DesignerSpider(scrapy.Spider):

  name = 'designer'

  allowed_domains = ['www.designerspics.com']

  start_urls = ['http://www.designerspics.com/']

  def parse(self, response):

  title = response.xpath('//div[@class="photograph-wrapper"]/div/h5[1]/text()').extract()

  image_url = response.xpath('//div[@class="photograph-wrapper"]/div/div/a/img/@src').extract()

  for index, t in enumerate(title):

  item = DesignerspicsItem()

  item['title'] = t[2:]

  item['image_url'] = image_url[index]

  yield item

  如果多頁爬取則可以這樣寫,因為每一頁的地址是這樣的除了第一頁

  第一頁:http://www.designerspics.com/

  第二頁:http://www.designerspics.com/page/2/

  第三頁:http://www.designerspics.com/page/3/

  ...

  import scrapy

  from scrapy import Request

  from designerspics.items import DesignerspicsItem

  class DesignerSpider(scrapy.Spider):

  name = 'designer'

  allowed_domains = ['www.designerspics.com']

  # start_urls = ['http://www.designerspics.com/']

  def start_requests(self):

  # 爬取10頁內容

  for i in range(1, 11):

  if i == 1:

  url = "http://www.designerspics.com/"

  yield Request(url, self.parse)

  else:

  url = 'http://www.designerspics.com/page/' + str(i)+"/"

  yield Request(url, self.parse)

  def parse(self, response):

  title = response.xpath('//div[@class="photograph-wrapper"]/div/h5[1]/text()').extract()

  image_url = response.xpath('//div[@class="photograph-wrapper"]/div/div/a/img/@src').extract()

  for index, t in enumerate(title):

  item = DesignerspicsItem()

  item['title'] = t[2:]

  item['image_url'] = image_url[index]

  yield item

  其中DesignerspicsItem類的代碼如下:

  import scrapy

  class DesignerspicsItem(scrapy.Item):

  # define the fields for your item here like:

  # name = scrapy.Field()

  collection = 'designerimages'

  title = scrapy.Field()

  image_url = scrapy.Field()

  此時開始定義Item Pipline,打開piplines.py文件

  import pymongo

  from scrapy import Request

  from scrapy.exceptions import DropItem

  from scrapy.pipelines.images import ImagesPipeline

  class DesignerspicsPipeline:

  def __init__(self, mongo_uri, mongo_db, mongo_port):

  self.mongo_uri = mongo_uri

  self.mongo_db = mongo_db

  self.mongo_port = mongo_port

  @classmethod

  def from_crawler(cls, crawler):

  return cls(mongo_uri=crawler.settings.get('MONGO_URI'),

  mongo_db=crawler.settings.get('MONGO_DB'),

  mongo_port=crawler.settings.get('MONGO_PORT')

  )

  def open_spider(self, spider):

  self.client = pymongo.MongoClient(host=self.mongo_uri, port=self.mongo_port)

  self.db = self.client[self.mongo_db]

  def process_item(self, item, spider):

  self.db[item.collection].insert(dict(item))

  return item

  def close_spider(self, spider):

  self.client.close()

  class ImagePipeline(ImagesPipeline):

  def file_path(self, request, response=None, info=None):

  url = request.url

  file_name = url.split('/')[-1]

  return file_name

  def item_completed(self, results, item, info):

  image_paths = [x['path'] for ok, x in results if ok]

  if not image_paths:

  raise DropItem('Image Downloaded Failed')

  return item

  def get_media_requests(self, item, info):

  yield Request(item['image_url'])

  此時需要在settings.py中配置:

  MONGO_URI = '127.0.0.1'

  MONGO_DB = 'designerimages'

  MONGO_PORT = 27017

  # 需要設置存儲圖片的路徑

  IMAGES_STORE = './images'

  啟動爬蟲:

  scrapy crawl designer

  來看一下成果吧!

Picture(3)

  Mongo數據庫的數據展示一下:

Picture(4)

  下篇預告:Scrapy分布式,歡迎分享!!!

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
男女啪啪免费观看的网址| 国产未成女一区二区| 国产精品高潮呻吟AV久久动漫 | 山东中年夫妇大白天露脸自拍| 无码丰满少妇2在线观看| 亚洲欧美日韩、中文字幕不卡| 中文字幕乱偷无码AV先锋蜜桃 | 黑森林精选AV导航| 男女性高爱潮是免费国产| 少妇人妻14页_麻花色| 亚洲精品无码专区在线在线播放 | 日本乱偷互换人妻中文字幕| 亚洲AV成人WWW永久无码精品| 中文日产幕无限码一区有限公司| 东北少妇大叫高潮XXXⅩ| 精品爆乳一区二区三区无码AV| 欧美成人精品手机在线| 无码人妻丰满熟妇奶水区码| 在床上拔萝卜视频高清免费看| 对白脏话肉麻粗话AⅤ| 精品人伦一区二区三区潘金莲| 欧美性生交XXXXX免费观看| 校花娇喘呻吟校长陈若雪视频| 制服丝袜另类专区制服| 国产A级三级三级三级| 久久精品国产一区二区三区| 国产精品白浆无码流出视频| 大肉大捧一进一出好爽视频| 2021国产手机在线精品| 亚洲精品卡一卡2卡3卡4卡| 少妇99久久黑人| 日本按摩高潮S级中文片| 乱肉怀孕又粗又大| 免费A级毛片18禁网站APP| 亚洲精品成人无码中文毛片不卡 | 国产精品久久久久久久影院| 鲁一鲁一鲁一鲁一曰综合网| 婷婷蜜桃国产精品一区| 18禁全彩肉肉无遮挡| 国产特级毛片AAAAAA毛片| 欧美XXXXX高潮喷水麻豆| 亚洲AV永久综合在线观看尤物 | 日本熟少妇裸交ⅩXX视频| 亚洲欧美日韩成人综合网| 绯色av蜜臀av少妇无码| 美女裸体跪姿扒开屁股无内裤| 无罩大乳的熟妇正在播放| JAPANESE厨房乱TUB偷| 精品免费看国产一区二区| 少妇高清精品毛片在线视频| 19岁MACBOOKPRO日本| 狠狠躁夜夜躁人人爽天天BL| 日韩人妻无码精品无码中文字幕| 在线观看成人无码中文AV天堂不| 国产小便视频在线播放| 日韩乱码人妻无码超清蜜桃丨 | 中文字幕 制服 亚洲 另类| 国产一级 片内射30岁老熟女| 日本插槽X8插槽怎么用| 一区二区三区国产精品保安| 国产熟女老妇300部MP4| 日本人妻丰满熟妇久久久久久| 中文字幕亚洲乱码熟女一区二区 | 欧美午夜成人片在线观看| 亚洲熟妇AV不卡一区二区三区| 国产黑色丝袜在线视频| 青青草A免费线观A| 野花韩国在线观看免费版5| 国产真实夫妇交换视频| 熟妇性MATURETUBE另类| MD豆传媒一二三区进站口在线看 | 国产成年无码V片在线| 公交车上拨开她湿润的内裤| 国产YW855.CCM免费观看| 国精品99久9在线 | 免费| 久久精品无码一区二区三区| 欧美熟女一区二区三区| 色欲av蜜臀一区二区三区多少| 约附近的寂寞妇女| 亚洲AV乱码一区二区三区林ゆな| 粗大猛烈进出高潮视频| 欧美极品小妇另类xXXX性| 又爽又黄又无遮挡网站| 九九九九精品视频在线观看| 亚洲AV日韩AV无码| 国产精品久久久久久久久岛| 日韩少妇激情一区二区| JAVASCRIPT中国免费| 免费观看A级毛片| 一本到午夜92版福利| 精品久久久久久中文字幕人妻最新| 无码一区二区三区AV免费 | 国内精品伊人久久久久AV| 无码精品人妻一区二区三区蜜桃 | 拍国产乱人伦偷精品视频| 800AV凹凸视频在线观看| 久久亚洲AV无码精品色午夜麻豆| 亚洲蜜桃无码视頻精品网| 激情爆乳一区二区三区| 亚洲 熟 图片 小说 乱 妇| 国产精品视频色尤物YW| 污到你下面流水的小黄文| 国产成人一区二区三区免费| 天天想你在线观看完整版电影 | 成人女人爽到高潮的Av在线| 欧美激情国产精品视频一区| 18黑白丝水手服自慰喷水网站| 久久婷婷五月综合色和啪| 阳茎伸入女人的阳道免费视频| 久久精品国产亚洲AV网站| 亚洲欧美日本A∨在线观看| 精品久久久久久中文墓无码| 亚洲人成网站18禁止大APP| 精品无码人妻一区二区三区18| 亚洲精品无码专区久久同性男| 精品人妻一区二区浪潮av| 亚洲乱色熟女一区二区三区蜜臀| 精品国产一区二区三区久久久狼| 亚洲欧好州第一的日产SUV| 久久精品爆乳熟妇AV-区| 久久综合亚洲色HEZYO社区| 无码无套少妇毛多18PXXXX| 幻女FREE性俄罗斯毛片| 天堂А√在线地址中文在线| CHINA真实VIDEOS另类| 看着领导挺进娇妻的体内电影| 亚洲AV无码一区东京热久久| 粉嫩小泬无遮挡久久久久久小说 | 免费国产成人高清在线视频| 中文字幕AV无码不卡免费| 久久久亚洲欧洲日产国产成人无码| 一本到在线高清视频| 奶酥1V2双C高| CEK俄罗斯BNAE0| 日日摸日日碰夜夜爽97| 国产成人AV大片在线播放| 小13箩利洗澡无码免费视频| 狠狠澡人人添人人爽人妻少妇| 亚洲色无码专区一区| 巨RU麻麻奶水雪白肥美喷| 9精产国品一二三产区| 日本丰满岳乱妇在线观看| 国产成人无码区免费A∨视频网站| 小受呻吟高潮GV在线观看| 精品免费久久久久久久| 中文字幕 制服 亚洲 另类| 强行破瓜稚嫩粗暴顶弄哭喊 | 日韩AV无码一区二区| 国产高清在线精品一区二区三区 | 麻批好紧日起要舒服死了| GAY国产GV又粗又长又大| 少妇被 到高潮喷出白浆av| 国产亚洲精品A第一页| 夜夜骚Av一区二区精品无码区| 欧美白人乱大交XXXX潮喷| 吃奶呻吟打开双腿做受动态图| 午夜.DJ高清在线观看免费8 | 国产午夜精品免费一区二区三区| 艳妇臀荡乳欲伦69调教视频| 人妻[21p]大胆| 国产精品欧美久久久久无广告| 亚洲日韩乱码久久久久久| 欧美粗大猛烈老熟妇| 国产99久久精品一区二区| 亚洲顶级裸体AV片| 女人18片毛片60分钟630| 国产99久久久国产精品~~牛| 亚洲国产精品无码久久98| 欧美成人精品高清在线观看| 国产妇女馒头高清泬20P多| 亚洲熟妇另类AV老熟女| 日本XXXX裸体XXXX| 含羞草传媒入口免费网站腾讯网| 中文无码AV电影在线观看网站 | 亚洲熟妇无码av叧娄本色| 欧美日韩精品视频一区二区三区| 国产黄A三级三级三级| 一本色道无码道在线观看| 视频一区二区三区在线观看| 无码AV高潮喷水无码专区线| 婚外偷欢娇妻HD| CAOPORN免费公开视频| 无码人妻丰满熟妇啪啪网不卡| 老外免费CSGO交易网站下载| 成年女人WWXX免费国产| 亚洲VA欧洲VA日韩VA| 欧美激情视频一区| 国产猛烈高潮尖叫视频免费 | 精品成人乱色一区二区| 中文无码一区二区三区在线观看| 色欲色香天天天综合无码WWW| 精品无人区一区二区三区在线| 班长哭了能不能再抠游戏里面的钱| 亚洲AV无码一区东京热久久| 漂亮人妻去按摩被按中出| 黑人大鸡吧操逼日本女人| А√天堂资源在线官网BT| 亚洲精品无码国模| 色狠狠AV一区二区三区| 久久久久亚洲精品无码系列|