scrapy框架_入门Scrapy框架看这一篇文章就够了
前言
Scrapy是一個非常優秀的框架,操作簡單,拓展方便,是比較流行的爬蟲解決方案。
Scrapy是一個用Python寫的Crawer Framework,簡單輕巧而且非常方便。Scrapy使用Twisted這個異步網絡庫來處理網絡通信,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。
Scrayp框架的優勢
1. 容易構建大規模抓取項目
2.?異步處理請求的速度快
3.?使用自動調節機制自動調整爬取速度
Scrapy框架的架構
我們知道Scrapy框架是一個快速的,高層次的基于Python的爬蟲框架,抓取web站點并從頁面提取結構化數據,我們只需要定制幾個模塊就可以輕松實現一個爬蟲。那么Scrapy框架究竟長的什么樣子?來看下面這幅圖,這幅圖大家看懂了,其實Scrapy框架就等于學會了一半了
有同學可能會問這幅圖是什么意思呢?咱們分別來解釋一下
Scrapy引擎(Engine)。引擎負責控制數據流在系統的所有組件中流動,并在相應動作發生時觸發事件。其實就相當于汽車的發動機一樣
調度器(Scheduler)。調度器從引擎接收request并將它們入隊,以便引擎請求request時提供給引擎
下載器(Downloader)。下載器負責獲取頁面數據并提供給引擎,而后提供給Spider。
Spider。Spider是Scrapy用戶編寫用于分析response并提取Item或額外跟進的URL的類。每個Spider負責處理一些特定的網站
ItemPipeline。ItemPipeline負責處理被Spider提取出來的Item。例如存儲到數據庫中
下載中間件(Downloader middlewares)。下載中間件是在引擎和下載器之間,處理Downloader傳遞給引擎的response。同時還可以插入自定義代碼來擴展Scrapy功能
Spider中間件(Spider middlewares)。Spider中間件是在引擎和Spider中間件之間,處理Spider的輸入(response)和輸出(Items及response)。同時還可以插入自定義代碼來擴展Scrapy功能
看完這些相信很多同學不是特別明白,那么Scrapy究竟是如何工作的呢?
首先,引擎打開一個網站,找到處理該網站的Spider并向該Spider請求第一個要爬取的URL。引擎從Spider中獲取到第一個要爬取的URL并通過調度器(Scheduler)以requests進行調度。引擎向調度器請求下一個要爬取的URL。
其次,調取器返回一個要爬取的URL給引擎,引擎將URL通過下載中間件轉發給下載器(Downloader)。一旦也沒下載完畢,下載生成一個該頁面的response,并將其通過下載中間件發送給引擎
最后,引擎從下載器中接收到response并通過Spider中間件發送給Spider處理。Spider處理respone并返回爬取到的Item,給ItemPipeline,將request給調度器。重復直到調度器中沒有更多的request,引擎關閉該網站
創建Scrapy項目
1?創建一個scrapy項目scrapy?startproject?mySpider
2 生成一個爬蟲
scrapy?genspider?demo?"demo.cn"
3?提取數據
完善spider?使用xpath等
4?保存數據
pipeline中保存數據
在命令中運行爬蟲
scrapy?crawl?qb?????#?qb爬蟲的名字
在pycharm中運行爬蟲
from?scrapy?import?cmdline
cmdline.execute("scrapy?crawl?qb".split())
Scrapy項目
下面我們以爬取汽車之家作為案例,由于頁面結構非常清晰,這里我們就不去講解了。讓大家感受下Scrapy框架非一般的速度。準備好了嗎?
class?AudiSpider(scrapy.Spider):????name?=?'audi'
????allowed_domains?=?['car.autohome.com.cn']
????start_urls?=?['https://car.autohome.com.cn/photolist/series/44501/5729675.html#pvareaid=3454450']
????def?parse(self,?response):
????????#?找ul下面的li
????????ul?=?response.xpath('//ul[@id="imgList"]/li')
????????for?li?in?ul:
????????????item?=?PicItem()
????????????item['image_urls']?=?['https:'?+?li.xpath('./a/img/@src').extract_first()]
????????????#?print(item)
????????????yield?item
from?urllib?import?request?
import?os
from?scrapy.pipelines.images?import?ImagesPipeline
class?PicPipeline(object):
????def?process_item(self,?item,?spider):
????????src?=?item['src']
????????img_name?=?item['src'].split('__')[-1]
????????#?保存圖片?指定一個路徑
????????file_path?=?os.path.join(os.path.dirname(os.path.dirname(__file__)),'img')
????????print(img_name)
????????request.urlretrieve(src,file_path+'/'+img_name)
????????return?item
效果展示
相信總有一款是你喜歡的愛車,那還等什么,趕緊用Scrapy去試試吧
總結
以上是生活随笔為你收集整理的scrapy框架_入门Scrapy框架看这一篇文章就够了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: samba 端口_无需公网IP,易有云支
- 下一篇: 静态ip和动态ip的区别_动态IP和静态