欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:Scrapy爬蟲框架介紹

柚子快報邀請碼778899分享:Scrapy爬蟲框架介紹

http://yzkb.51969.com/

目錄

什么是Scrapy

Scrapy核心組件

Scrapy擴(kuò)展組件

組件交互流程

安裝Scrapy

Scrapy項(xiàng)目目錄結(jié)構(gòu)說明

創(chuàng)建Scrapy項(xiàng)目

創(chuàng)建爬蟲

運(yùn)行爬蟲

配置請求頭

全局配置請求頭

指定爬蟲配置請求頭

配置管道pipeline

全局配置pipeline

方式一:指定爬蟲配置pipeline

方式二:指定爬蟲配置pipeline

數(shù)據(jù)建模 items

Scrapy官網(wǎng):https://scrapy.org/

什么是Scrapy

Scrapy 是一個基于 Python 的快速的高級網(wǎng)頁抓取和網(wǎng)頁爬取框架,用于抓取網(wǎng)站并從其頁面中提取結(jié)構(gòu)化數(shù)據(jù)。它可用于多種用途,從數(shù)據(jù)挖掘到監(jiān)控和自動化測試。

Scrapy核心組件

1. Scrapy Engine(Scrapy引擎)

Scrapy 引擎是整個系統(tǒng)的核心,負(fù)責(zé)控制數(shù)據(jù)流在所有組件之間的流動。它從調(diào)度器獲取請求,發(fā)送給下載器處理,然后將下載器返回的響應(yīng)交給爬蟲處理。2. Scheduler(調(diào)度器)

調(diào)度器負(fù)責(zé)接收引擎發(fā)來的請求并進(jìn)行排序,然后將這些請求發(fā)送給引擎。調(diào)度器可以處理優(yōu)先級,并且支持去重機(jī)制以避免重復(fù)抓取。3. Downloader(下載器)

下載器負(fù)責(zé)向互聯(lián)網(wǎng)上的服務(wù)器發(fā)送請求,并接收響應(yīng)。Scrapy 下載器是高度異步的,能夠高效地處理大量請求。4. Spiders(爬蟲)

爬蟲是用戶定義的類,負(fù)責(zé)處理下載器返回的響應(yīng),從中提取數(shù)據(jù)(Item)或進(jìn)一步生成請求。每個爬蟲定義了要抓取的域名和處理響應(yīng)的邏輯。5. Item(數(shù)據(jù)項(xiàng))

Item 是一種簡單的數(shù)據(jù)容器,用于存儲從網(wǎng)頁中提取的數(shù)據(jù)。Item 類似于字典,但提供了額外的保護(hù)和方法。6. Item Pipeline(數(shù)據(jù)管道)

數(shù)據(jù)管道是一個序列化系統(tǒng),用于處理和存儲從爬蟲中提取的數(shù)據(jù)。每個管道組件負(fù)責(zé)處理數(shù)據(jù)項(xiàng)的一部分,例如數(shù)據(jù)清洗、驗(yàn)證或存儲。7. Downloader Middlewares(下載中間件)

下載中間件是介于調(diào)度器和下載器之間的鉤子,用于處理請求和響應(yīng)。它們可以修改或擴(kuò)展請求和響應(yīng)的處理流程,例如設(shè)置代理、修改請求頭等。8. Spider Middlewares(爬蟲中間件)

爬蟲中間件是介于引擎和爬蟲之間的鉤子,用于處理爬蟲輸入和輸出的響應(yīng)和結(jié)果。它們可以修改或擴(kuò)展爬蟲的處理流程,例如添加額外的日志記錄、處理異常等。

Scrapy擴(kuò)展組件

1. Feed Exports(數(shù)據(jù)導(dǎo)出)

Scrapy 支持將抓取的數(shù)據(jù)導(dǎo)出為多種格式(如 JSON、CSV、XML),并可以配置導(dǎo)出的細(xì)節(jié)(如字段順序、編碼等)。2. Telnet Console(Telnet 控制臺)

Telnet 控制臺提供了一個實(shí)時監(jiān)控和調(diào)試爬蟲的工具,允許開發(fā)者在爬蟲運(yùn)行時進(jìn)行交互式調(diào)試。3. Logging(日志)

Scrapy 內(nèi)置了強(qiáng)大的日志系統(tǒng),用于記錄運(yùn)行時的各種信息,如調(diào)試信息、錯誤消息等。日志系統(tǒng)可以配置不同的日志級別和輸出格式。4. Extensions(擴(kuò)展)

擴(kuò)展模塊用于增強(qiáng) Scrapy 的功能,例如自動重試失敗的請求、監(jiān)控爬蟲性能等。開發(fā)者可以自定義擴(kuò)展模塊以滿足特定需求。5. Stats Collectors(統(tǒng)計收集器)

統(tǒng)計收集器用于收集和記錄爬蟲運(yùn)行時的各種統(tǒng)計信息,如請求數(shù)量、響應(yīng)時間等。統(tǒng)計信息可以用于優(yōu)化和調(diào)試爬蟲。

組件交互流程

初始請求:爬蟲從 start_urls 生成初始請求,并通過引擎(Engine)發(fā)送給調(diào)度器(Scheduler)。請求調(diào)度:調(diào)度器(Scheduler)將請求排序并發(fā)送給下載器(Downloader)。請求下載:下載器(Downloader)向目標(biāo)網(wǎng)站(Internet)發(fā)送請求并獲取響應(yīng)。響應(yīng)處理:下載器(Downloader)將響應(yīng)發(fā)送給引擎(Engine),進(jìn)而交給爬蟲(Spiders)處理。數(shù)據(jù)提?。号老x(Spiders)從響應(yīng)中提取數(shù)據(jù)項(xiàng),并生成新的請求(如果有)。數(shù)據(jù)處理:提取的數(shù)據(jù)項(xiàng)通過數(shù)據(jù)管道(Item Pipeline)進(jìn)行處理和存儲。

安裝Scrapy

pip install scrapy

Scrapy項(xiàng)目目錄結(jié)構(gòu)說明

Scrapy 項(xiàng)目的結(jié)構(gòu)較為標(biāo)準(zhǔn),以下是一個典型的 Scrapy 項(xiàng)目的目錄結(jié)構(gòu)圖示及其簡要說明,供方便理解。

myproject/

├── myproject/ # 項(xiàng)目目錄(主目錄)

│ ├── __init__.py

│ ├── items.py # 定義 Item 類(數(shù)據(jù)結(jié)構(gòu))

│ ├── middlewares.py # 自定義中間件

│ ├── pipelines.py # Item 處理管道

│ ├── settings.py # 項(xiàng)目設(shè)置文件

│ ├── spiders/ # 存放爬蟲的目錄

│ │ ├── __init__.py

│ │ ├── example_spider.py # 定義爬蟲

├── scrapy.cfg # Scrapy 配置文件

└── README.md # 項(xiàng)目的說明文件(可選)

創(chuàng)建Scrapy項(xiàng)目

使用 scrapy startproject 命令來創(chuàng)建一個新的 Scrapy 項(xiàng)目。打開終端或命令行,進(jìn)入你想要創(chuàng)建項(xiàng)目的目錄,并運(yùn)行以下命令

# scrapy startproject <項(xiàng)目名稱>

scrapy startproject myproject

創(chuàng)建爬蟲

在項(xiàng)目根目錄中,你可以使用 scrapy genspider 命令創(chuàng)建新的爬蟲。以下命令將創(chuàng)建一個名為 baidu 的爬蟲,用于抓取 www.baidu.com 的域名

# scrapy genspider <爬蟲名稱> <允許爬取的域名>

scrapy genspider baidu www.baidu.com

完整目錄結(jié)構(gòu)如下

爬蟲文件內(nèi)容說明

解析方法解析response

# 解析方法,response:爬取起始url的響應(yīng)

def parse(self, response):

# 解析示例

with open("baidu.html", "wb") as f:

f.write(response.body)

運(yùn)行爬蟲

運(yùn)行爬蟲之前需要修改?settings.py 配置文件的配置,如下:

使用 scrapy crawl 命令來運(yùn)行你的爬蟲。以下命令會啟動名為 baidu 的爬蟲:

# scrapy crawl <爬蟲名稱>

scrapy crawl baidu

配置請求頭

全局配置請求頭

在?settings.py 配置文件中,配置?USER_AGENT 和?DEFAULT_REQUEST_HEADERS 參數(shù),示例如下:

# Crawl responsibly by identifying yourself (and your website) on the user-agent

USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36"

# Override the default request headers:

DEFAULT_REQUEST_HEADERS = {

"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

"Accept-Language": "zh-CN,zh;q=0.9",

}

指定爬蟲配置請求頭

在指定爬蟲文件中,配置?start_requests 方法,示例如下:

import scrapy

class TeibaSpider(scrapy.Spider):

name = "teiba"

allowed_domains = ["tieba.baidu.com"]

start_urls = ["https://tieba.baidu.com/f?kw=沙井"]

def start_requests(self):

headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36',

'Accept-Language': 'zh-CN,zh;q=0.9',

}

for url in self.start_urls:

yield scrapy.Request(url, headers=headers, callback=self.parse)

def parse(self, response):

pass

配置管道pipeline

全局配置pipeline

在?settings.py 配置文件中,配置ITEM_PIPELINES 參數(shù)用于開啟管道,示例如下:

# Configure item pipelines

ITEM_PIPELINES = {

# myproject:項(xiàng)目名稱

# pipelines:項(xiàng)目下的pipelines.py文件

# MyprojectPipeline:pipelines.py文件中指定的類

# 300:管道優(yōu)先級,多個管道時,數(shù)字越小優(yōu)先級越高越先執(zhí)行

"myproject.pipelines.MyprojectPipeline": 300,

}

pipelines.py 文件內(nèi)容如下:

當(dāng)管道開啟后,在我們啟動爬蟲時,日志打印信息如下:

方式一:指定爬蟲配置pipeline

在指定爬蟲文件中,配置?custom_settings 屬性,示例如下:

import scrapy

class TeiBaSpider(scrapy.Spider):

name = "teiba"

allowed_domains = ["tieba.baidu.com"]

start_urls = ["https://tieba.baidu.com/f?kw=沙井"]

# 指定 pipeline

custom_settings = {

'ITEM_PIPELINES': {

'myproject.pipelines.TieBaPipeline': 300,

}

}

def parse(self, response):

item = {}

item['title='] = a.xpath('./@title').get()

item['url='] = "https://tieba.baidu.com/" + a.xpath('./@href').get()

# yield 的數(shù)據(jù)會返回到 TieBaPipeline 中

yield item

pipelines.py 文件內(nèi)容如下:

方式二:指定爬蟲配置pipeline

在?settings.py 配置文件中,配置 ITEM_PIPELINES 參數(shù)配置多個,示例如下:

ITEM_PIPELINES = {

"myproject.pipelines.BaiDuPipeline": 300,

"myproject.pipelines.TieBaPipeline": 301,

}

在?pipelines.py 文件中通過爬蟲名稱判斷

from itemadapter import ItemAdapter

class BaiDuPipeline:

def open_spider(self, spider):

# 初始化方法,類比 def __init__(self)

if spider.name == "baidu":

pass

def process_item(self, item, spider):

if spider.name == "baidu":

pass

return item

def close_spider(self, spider):

# 析構(gòu)方法,類比 def __del__(self)

if spider.name == "baidu":

pass

class TieBaPipeline:

def open_spider(self, spider):

if spider.name == "tieba":

pass

def process_item(self, item, spider):

if spider.name == "tieba":

pass

return item

def close_spider(self, spider):

if spider.name == "tieba":

pass

數(shù)據(jù)建模 items

數(shù)據(jù)建模的好處是統(tǒng)一數(shù)據(jù)字段免得寫錯,會在執(zhí)行的時候?qū)δ0遄侄芜M(jìn)行檢測。清晰代碼便于維護(hù)等好處。

1. 創(chuàng)建模型

在?items.py 文件中,創(chuàng)建模型

import scrapy

class UserItem(scrapy.Item):

# define the fields for your item here like:

# 用戶名稱

name = scrapy.Field()

# 用戶年齡

age = scrapy.Field()

2. 爬蟲中使用模型

import scrapy

from myproject.items import UserItem

class BaiduSpider(scrapy.Spider):

name = "baidu"

allowed_domains = ["www.baidu.com"]

start_urls = ["https://www.baidu.com"]

def parse(self, response):

# 使用模型

item = UserItem()

item['name'] = response.xpath('//h1/text()').get()

item['age'] = response.xpath('//h2/text()').get()

yield item

3. 管道中使用模型

from itemadapter import ItemAdapter

class MyprojectPipeline:

def process_item(self, item, spider):

# 把對象類型轉(zhuǎn)換成字典類型

item = dict(item)

return item

柚子快報邀請碼778899分享:Scrapy爬蟲框架介紹

http://yzkb.51969.com/

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19407914.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄