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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

scrapy框架_入门Scrapy框架看这一篇文章就够了

發布時間:2024/1/23 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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框架看这一篇文章就够了的全部內容,希望文章能夠幫你解決所遇到的問題。

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