柚子快報邀請碼778899分享:scrapy寫爬蟲
柚子快報邀請碼778899分享:scrapy寫爬蟲
Scrapy是一個用于爬取網(wǎng)站數(shù)據(jù)并提取結(jié)構(gòu)化信息的Python框架
一、Scrapy介紹
1.引擎(Engine) – Scrapy的引擎是控制數(shù)據(jù)流和觸發(fā)事件的核心。它管理著Spider發(fā)送的請求和接收的響應(yīng),以及處理Spider生成的Item。引擎是Scrapy運行的驅(qū)動力。
2.調(diào)度器(Scheduler) – 調(diào)度器負責(zé)接收引擎發(fā)送的請求,并根據(jù)一定的策略(如優(yōu)先級、深度等)將它們?nèi)腙?。?dāng)引擎需要新的請求時,調(diào)度器會從隊列中取出請求并返回給引擎。它確保了請求的有序處理。
3.下載器(Downloader) – 下載器負責(zé)根據(jù)Scrapy引擎發(fā)送的請求下載網(wǎng)頁內(nèi)容。它使用HTTP協(xié)議與網(wǎng)站服務(wù)器進行通信,并將下載的網(wǎng)頁內(nèi)容作為響應(yīng)返回給Scrapy引擎。下載器是Scrapy獲取網(wǎng)頁數(shù)據(jù)的核心組件。
4.Spiders – Spiders是Scrapy中用于定義爬取邏輯和解析網(wǎng)頁內(nèi)容的組件。它們根據(jù)定義的規(guī)則生成初始請求,并處理下載器返回的響應(yīng),從中提取出需要的數(shù)據(jù)(Item)或生成新的請求(Request)進行進一步的爬取
5.Item Pipelines – Item Pipelines負責(zé)處理Spider提取出的Item。它們可以執(zhí)行各種任務(wù),如清洗數(shù)據(jù)、驗證數(shù)據(jù)的完整性、存儲數(shù)據(jù)到數(shù)據(jù)庫或文件中。通過定義多個Pipeline,可以靈活地處理數(shù)據(jù),滿足不同的需求。
6.下載器中間件(Downloader Middlewares) – 下載器中間件位于Scrapy引擎和下載器之間,用于處理請求和響應(yīng)。它們可以修改請求(如添加請求頭、設(shè)置代理等)或響應(yīng)(如壓縮處理、重定向處理等),從而控制Scrapy如何與網(wǎng)站交互。中間件是Scrapy擴展功能的重要機制。
7.Spider中間件(Spider Middlewares) – Spider中間件位于Scrapy引擎和Spiders之間,用于處理Spider的輸入(即響應(yīng))和輸出(即Item和新的請求)。它們可以修改或丟棄響應(yīng),處理異常,甚至修改或丟棄Spider生成的Item和Request。Spider中間件提供了在Spider執(zhí)行過程中插入自定義功能的能力。
各組件之間的數(shù)據(jù)流向如圖所示:
從初始URL開始,Scheduler會將其交給Downloader進行下載下載之后會交給Spider進行分析Spider分析出來的結(jié)果有兩種一種是需要進一步抓取的鏈接,如 “下一頁”的鏈接,它們會被傳回Scheduler;另一種是需要保存的數(shù)據(jù),它們被送到Item Pipeline里,進行后期處理(詳細分析、過濾、存儲等)
二.安裝scrapy
pip install scrapy
安裝后,只要在命令終端輸入 scrapy,提示類似以下結(jié)果,代表已經(jīng)安裝成功
三、Scrapy應(yīng)用示例
1、新建項目 在開始爬取之前,必須創(chuàng)建一個新的Scrapy項目。進入自定義的項目目錄中,運行下列命令:
scrapy startproject Spider
其中: mySpider 為項目名稱,可以看到將會創(chuàng)建一個 mySpider 文件夾,目錄結(jié)構(gòu)大致如下:
mySpider/
scrapy.cfg
mySpider/
__init__.py
items.py
pipelines.py
settings.py
spiders/
__init__.py
...
scrapy.cfg: 項目的配置文件。mySpider/: 項目的Python模塊,將會從這里引用代碼。mySpider/items.py: 項目的目標文件。mySpider/pipelines.py: 項目的管道文件。mySpider/settings.py: 項目的設(shè)置文件。mySpider/spiders/: 存儲爬蟲代碼目錄。
2、創(chuàng)建爬蟲 在當(dāng)前目錄下輸入命令,將在mySpider/spiders目錄下創(chuàng)建一個名為bd_test的爬蟲,并指定爬取域的范圍:
scrapy genspider bd_test "baidu.com"
注意: 第一個參數(shù)是爬蟲名字不是項目名字; 第二個參數(shù)是網(wǎng)站域名,是允許爬蟲采集的域名。比如:baidu.com 不限制域名 可能爬到 zhihu.com 。后期可以更改,但要先有生成的目錄和文件結(jié)果:
執(zhí)行命令(執(zhí)行的是spiders中name)
scrapy crawl baidu
也可以腳本運行
from scrapy import cmdline
cmdline.execute("scrapy crawl qb".split())
3、編寫spiders class中的 name:也是就是爬蟲名一定是唯一的 allowed_domains:域名 start_urls:鏈接(列表可寫入多條,按順序)一般一個 parse(): 被調(diào)用時,每個初始 URL 完成下載后生成的 Response 對象將會作為唯一的參數(shù)傳遞給該函數(shù)。該方法負責(zé)解析返回的數(shù)據(jù),提取數(shù)據(jù)(生成 item)以及生成需要進一步處理的 URL 的 Request 對象。
4、創(chuàng)建item 創(chuàng)建完 Spider 文件之后,接著定義一個容器來保存要爬取的數(shù)據(jù),我們對items.py文件進行更改或者創(chuàng)建一個新的文件來定義 item 都行。 ??創(chuàng)建 Item 需要繼承 scrapy.Item 類,并且定義類型為 scrapy.Field 的字段。例如我們要爬取慕課網(wǎng)站課程的信息,包括課程名稱,課程 URL,課程圖片 URL,課程描述,學(xué)習(xí)人數(shù)。
import scrapy
class MyreptileItem(scrapy.Item):
# 在這里可以定義你需要的字段,如:
name = scrapy.Field()
title = scrapy.Field()
url = scrapy.Field()
image_url = scrapy.Field()
introduction = scrapy.Field()
student = scrapy.Field()
當(dāng)spiders調(diào)用時,導(dǎo)入即可 5、pipelines.py 在Scrapy中,Pipelines 是用來處理爬取到的數(shù)據(jù)(Item)的組件。它們可以執(zhí)行一些清理、驗證和持久化(比如存儲到數(shù)據(jù)庫或文件)的操作。列入存入redis: 6、中間件middlewares 具體參考文章:https://www.jianshu.com/p/2c524bfc11d1
參考文獻:同上
柚子快報邀請碼778899分享:scrapy寫爬蟲
參考鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。