日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python爬虫-Scrapy-CrawlSpider与ItemLoader

發布時間:2025/4/14 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫-Scrapy-CrawlSpider与ItemLoader 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、CrawlSpider

根據官方文檔可以了解到, 雖然對于特定的網頁來說不一定是最好的選擇, 但是 CrwalSpider 是爬取規整的網頁時最常用的 spider, 而且有很好的可塑性.

除了繼承自 Spider 的屬性, 它還拓展了一些其他的屬性. 對我來說, 最常用的就是 rules 了.

爬蟲一般來說分為垂直爬取和水平爬取, 這里拿?貓眼電影TOP100?舉例. 垂直爬取就是從目錄進入到內容詳情后爬取, 即從當前頁進入某一影片的詳情頁面; 水平爬取就是從這一頁目錄翻到下一頁目錄后爬取, 即從當前頁到排名第十一至二十的頁面. 不論是哪一種爬取, 都離不開 url, 即你想要去到的頁面的鏈接, 而 rules 就為我們提供了一套提取鏈接的規則, 以及得到鏈接后應該怎么做.

來看一下 rules 中 Rule 的定義, class?scrapy.spiders.Rule(link_extractor,?callback=None,?cb_kwargs=None,?follow=None,?process_links=None,?process_request=None), 這里也只說我自己經常用到的.

1.? link_extractor:?

  class scrapy.linkextractors.lxmlhtml.LxmlLinkExtractor(allow=(), deny=(), allow_domains=(), deny_domains=(), restrict_xpaths=(),?tags=('a', 'area'), attrs=('href',), canonicalize=False,?unique=True,

process_value=None, deny_extensions=None, restrict_css=(),?strip=True)

  提取鏈接的規則在這里定義, 并且提取出鏈接后會生成一個 scrapy.Request 對象. allow里是正則表達式, 過濾掉不符合要求的鏈接; restrict_xpath 和 restrict_css定義獲取鏈接的區域.

2. callback:

  回調函數, 請求得到相應后用什么方法處理, 和 Request 中的 callback 一樣, 但是此處以字符串形式表示而不是方法引用.

3. follow:

  請求得到響應后是否繼續用本套rules規則來提取鏈接. 布爾值類型, 如果callback為None, 則默認為True, 否則為False.

這里的 rules 功能類似于 Spider類里的 parse() 方法, 請求 start_urls 中的鏈接, 并且返回新的 Request.

?

二、ItemLoader

Items 為抓取的數據提供了容器, 而 Item Loaders 提供填充容器的機制, 并且其API更加便捷好用.

之前用 Spider 類的時候, 一般都是直接使用 scrapy.item 的, 當網頁高度規整的時候我們改用了 CrawlSpider 類. 當獲取到高度規整的數據時, 我們想要進行處理, 這時候 Item Loader 就發揮其作用了.

定義:? class scrapy.loader.ItemLoader(item=None, selector=None, response=None, parent=None, **context)

item:? 自己定義的容器.

selector:? Selector 對象, 提取填充數據的選擇器.

response:? Response 對象, 可以構造選擇器的響應, 因為 scrapy 里的響應可以直接使用 xpath 或 css, 這里把它當成選擇器也差不多.

ItemLoader 的使用:

1 from scrapy.loader import ItemLoader 2 from qoutes.items import QuoteItem 3 import time 4 5 def parse_item(self, response): 6 quotes = response.css('.quote') 7 for quote in quotes: 8 loader = ItemLoader(item=QuoteItem(), selector=quote) 9 loader.add_css('author', '.author::text') 10 loader.add_css('tags', '.tag::text') 11 loader.add_xpath('text', './/*[@class="tag"]/text()') 12 loader.add_value('addtime', time.ctime()) 13 yield loader.load_item()

相較于 Item 的字典類使用方法, ItemLoader 顯得更簡單明了, 這樣的代碼有著更好的可維護性以及自描述性.

這里有兩個小問題特別說一下, 是我自己剛開始使用 ItemLoader 時犯的錯.

第一個就是, 使用 ItemLoader 后不需要調用 extract() 了, item里的值類型為 list.

第二個就是, 當頁面中有多個 item, 循環遍歷時是使用 selector='你的選擇器'. 如果使用 response='你的響應' 的話, 你會發現返回的 item 內容要么出錯要么重復.

處理器:? 結合數據以及對數據進行格式化和清洗的函數

例:

上圖中的 "unicode" 應替換為 "str".

對我來說, 最常用就是 MapCompose 搭配匿名函數, 可以更加靈活的處理數據. MapCompose 和 Python 內置的 map 類似, 根據所給函數來遍歷處理可迭代對象中的每個值.

使用方法也挺簡單, 只需要在編寫填充機制的時候加上處理器即可, 如:??loader.add_css('tags', '.tag::text', MapCompose(str.title)).

定義 ItemLoader 的子類:

就我而言, 定義子類最大的意義就是可以對每個已獲得的數據使用指定的處理器.

剛剛說過, ItemLoader 會對 xpath 或 css 提取出來的結果做出類似 extract() 的處理, 所以結果都會以列表的形式返回. 有時候列表里就一個以字符串形式表示的值, 我們希望直接得到字符串, 這時可以使用處理器 TakeFirst(), 返回列表第一個非空值, 類似于 extract_first(). 如果所有的結果要做這樣的處理, 那在編寫填充機制的時候依次添加處理器就顯得過于麻煩了. 此時我們就可以定義一個 ItemLoader 的子類.?

通過重寫?default_input_processor 和 default_input_processor 便可以達到目的.

例:

1 class NewLoader(ItemLoader): 2 default_input_processor = TakeFirst() 3 default_output_processor = str.title()

需要注意的是處理器執行的順序, 最先執行編寫填充機制時加的處理器, 接著是?default_input_processor, 然后是defualt_output_processor.

所有的處理在使用之前都需要導入.

?

以上便是我目前對?Scrapy 中 CrawlSpider 與 ItemLoader 的了解.

轉載于:https://www.cnblogs.com/yangshaolun/p/10886307.html

總結

以上是生活随笔為你收集整理的Python爬虫-Scrapy-CrawlSpider与ItemLoader的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 免费国产视频在线观看 | 刘玥91精选国产在线观看 | 亚洲五月综合 | 99久久久无码国产精品性青椒 | 亚洲码无人客一区二区三区 | 日韩精品在线电影 | 欧美精品免费一区二区三区 | 久久久无码精品亚洲无少妇 | 免费a在线观看播放 | 久久成人精品视频 | 久久aⅴ国产欧美74aaa | 滋润少妇h高h| 激情一区二区 | 一区二区三区麻豆 | 在线观看免费观看在线 | 久久精品国产亚洲AV黑人 | 日韩欧美视频二区 | 欧美视频第一页 | 天天干天天干天天 | 粉嫩aⅴ一区二区三区四区五区 | 亚洲黄色影视 | 中文字幕亚洲精品 | 亚洲精品一区二区在线观看 | 性猛交ⅹxxx富婆video | 久久精品视频网 | 欧美粗暴jizz性欧美20 | 日韩性生交大片免费看 | 国产精品麻豆一区 | 亚洲欧美一区二区三区四区 | 岛国裸体写真hd在线 | 91不卡在线 | 男女在线观看视频 | 男人天堂视频在线 | 视频免费在线 | 97自拍视频在线 | 激情婷婷在线 | 一道本在线视频 | 国产精品亚洲一区二区三区在线观看 | 国产成人精品综合在线观看 | 中文字幕一区二区三区乱码在线 | 美女av一区二区 | 天天干夜夜爽 | 国产精品久久久久久久久久久新郎 | 毛片999| 免费在线看a | 欧美婷婷六月丁香综合色 | 无码精品人妻一区二区三区湄公河 | 欧美性三级| 国产精品一区二区在线免费观看 | 中文字幕影片免费在线观看 | japan粗暴video蹂躏 | 亚洲精品v天堂中文字幕 | 曰本不卡视频 | 激情国产精品 | 欧美精品一区二区在线观看 | 99riAv国产精品无码鲁大师 | 亚洲av无码乱码在线观看富二代 | 国产精品99久久 | 丰满放荡岳乱妇91ww | 亚洲熟悉妇女xxx妇女av | 国产三级理论 | 精品视频无码一区二区三区 | 亚洲精品国产精品国 | 国产91丝袜在线播放九色 | 精品国产鲁一鲁一区二区张丽 | 亚洲天天视频 | 国产精品天美传媒入口 | 日本黄色免费看 | 少妇高潮久久久久久潘金莲 | 亚洲一区二区在线播放 | 国产女主播福利 | 久久久国产一区 | 男人的天堂av女优 | 久久亚洲电影 | 色窝网| 超碰91人人 | 欧美熟妇乱码在线一区 | 伊人射 | 9久久9毛片又大又硬又粗 | 成人午夜视频在线免费观看 | 欧美裸体xxx| 欧美透逼视频 | 日韩精品av一区二区三区 | 黄视频在线观看免费 | 超级碰碰97| 久艹在线观看 | 又大又硬又爽免费视频 | 日本在线视频www色 国产在线视频网址 | 欧美日韩中文字幕视频 | 看毛片的网址 | 黄色免费在线播放 | 十大污网站 | 香蕉色视频 | 最新色网址 | 人人草网站 | 极品粉嫩国产18尤物 | 中文字幕在线观看免费视频 | 和漂亮岳做爰3中文字幕 | 亚洲精品无码成人 |