尚硅谷爬蟲note15n

1. 多條管道

多條管道開啟(2步):
????????? (1)定義管道類
????????(2)在settings中開啟管道

在pipelines中:

import urllib.request
# 多條管道開啟
#(1)定義管道類
#(2)在settings中開啟管道
# "demo_nddw.pipelines.dangdangDownloadPipeline": 301
class dangdangDownloadPipeline:def process_item(self, item, spider):url = 'http:' + item.get('src')filename = './books' + item.get('name') + '.jpg'urllib.request.urlretrieve(url = url, filename=filename())return item

2. 多頁下載

??????? 爬取每頁的業務邏輯都是一樣的,將執行那頁的請求再次調用就可以了

# 如果是多頁下載的話,必須調整allowed_domains的范圍,一般只寫域名
allowed_domains = ["category.dangdang.com"]

ddw.py中:

#多頁下載
# 爬取每頁的業務邏輯是一樣的,將執行那頁的請求再次調用parse方法就可以了
# https://category.dangdang.com/cp01.27.01.06.00.00.html
# https://category.dangdang.com/pg2-cp01.27.01.06.00.00.html
# https://category.dangdang.com/pg3-cp01.27.01.06.00.00.html
if self.page < 100:self.page = self.page + 1url = self.basic_url + str(self.page) + '-cp01.27.01.06.00.00.html'# 怎么調用parse方法# scrapy.Request就是scrapy的get請求#url就是請求地址、callback就是要執行的函數,不需要()yield scrapy.Request(url = url, callback =self.parse)

3. 電影天堂

??????? 獲取:

????????????????第一頁的名字

??????????????? 第二頁的圖片

涉及到兩個頁面:使用meta進行傳遞

pipelines.py

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html# useful for handling different item types with a single interface
from itemadapter import ItemAdapterclass DemoDyttPipeline:#開始def open_spider(self,spider):self.fp = open('dytt.json','w',encoding='utf-8')def process_item(self, item, spider):#中間self.fp.write(str(item))return item#結束def close_spider(self,spider):self.fp.close()

items.py

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.htmlimport scrapyclass DemoDyttItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# pass# 名字name = scrapy.Field()# 圖片src = scrapy.Field()

dytt.py

import scrapy#導入:從項目的items中導入
from demo_dytt.items import DemoDyttItemclass DyttSpider(scrapy.Spider):name = "dytt"# 調整allowed_domains訪問范圍:只要域名allowed_domains = ["www.dydytt.net"]start_urls = ["https://www.dydytt.net/html/gndy/dyzz/20250306/65993.html"]def parse(self, response):# pass# print('===========================================================')# 要第一頁的圖片,和第二頁的名字a_list = response.xpath('//div[@class = "co_content8"]//tr[2]//a[2]')for a in a_list:# 獲取第一頁的name,和要點擊的鏈接name = a.xpath('./text()').extract_first()href  =a.xpath('/@href').extract_first()# 第二頁的地址url = 'https://www.dydytt.net' + href# 對第二頁鏈接發起訪問# 1)meta字典:傳遞yield scrapy.Request(url = url,callback=self.parse_second,meta={'name':name})def parse_second(self,response):# 拿不到數據,檢查xpath語法是否錯誤src = response.xpath('//div[@id = "Zoom"]/span/img/@src').extract_first()print(src)#2)接收meta字典meta = response.meta['name']dytt = DemoDyttItem(src = src, name = name)#將dytt返回給管道,需要在settings中開啟管道:解除管道注釋即是開啟管道# ITEM_PIPELINES = {#     "demo_dytt.pipelines.DemoDyttPipeline": 300,# }yield dytt

開啟管道:

????????在settings.py中解除管道的注釋即是開啟管道

ITEM_PIPELINES = {"demo_dytt.pipelines.DemoDyttPipeline": 300,
}

4. CrawlSpider

??????? 繼承自scrapy.spider

CrawlSpider:what?

????????1)定義規則

????????2)提取符合規則的鏈接

????????3)解析

鏈接提取器

??????? 1)導入鏈接提取器

from scrapy.linkextractors import LinkExtractor

??????? 2)

allow = ()??????? :正則表達式

restrict_xpaths = ()??????? :xpath

restrict_css = ()??????? :不推薦

??????? scrapy shell 網址,然后進行3)4)的鏈接提取

導入鏈接提取器:

????????from scrapy.linkextractors import LinkExtractor

????????3)allow = ()??語法

link = LinkExtraactor(allow = r' /book/1188_\d+\.html')

??????? \d表示數字

??????? +表示1~多

查看:

link.extract_links(response)

????????4)restrict_xpaths = ()語法

link1 = LinkExtractor(restrict_xpaths = r' //div[@class = "pages"]/a/@href ')

查看:

link.extract_links(response)

5. CrawlSpider案例

1)創建文件:

??????? scrapy genspider -t crawl 文件名 網址

2)首頁不在提取規則,所以不能提取首頁

修改start_urls:

????????start_urls = ["https://www.dushu.com/book/1157.html"]

?修改后:

????????start_urls = ["https://www.dushu.com/book/1157_1.html"]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71876.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71876.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71876.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle檢查字段為空

在Oracle數據庫中&#xff0c;檢查字段是否為空通常涉及到使用IS NULL條件。如果你想查詢某個表中的字段是否為空&#xff0c;你可以使用SELECT語句結合WHERE子句來實現。這里有一些基本示例來展示如何進行這樣的查詢。 示例1: 檢查單個字段是否為空 假設你有一個表employees…

虛幻基礎:動畫層接口

文章目錄 動畫層&#xff1a;動畫圖表中的函數接口&#xff1a;名字&#xff0c;沒有實現。動畫層接口&#xff1a;由動畫藍圖實現1.動畫層可直接調用實現功能2.動畫層接口必須安裝3.動畫層默認使用本身實現4.動畫層也可使用其他動畫藍圖實現&#xff0c;但必須在角色藍圖中關聯…

HarmonyOS學習第18天:多媒體功能全解析

一、開篇引入 在當今數字化時代&#xff0c;多媒體已經深度融入我們的日常生活。無論是在工作中通過視頻會議進行溝通協作&#xff0c;還是在學習時借助在線課程的音頻講解加深理解&#xff0c;亦或是在休閑時光用手機播放音樂放松身心、觀看視頻打發時間&#xff0c;多媒體功…

緒論數據結構基本概念(刷題筆記)

&#xff08;一&#xff09;單選題 1.與數據元素本身的形式、相對位置和個數無關的是&#xff08;B&#xff09;【廣東工業大學2019年829數據結構】 A.數據存儲結構 B.數據邏輯結構 C.算法 D.操作 2.在數據結構的討論中把數據結構從邏輯上分為&#xff08;C&#xff09;【中國…

GPTQ - 生成式預訓練 Transformer 的精確訓練后壓縮

GPTQ - 生成式預訓練 Transformer 的精確訓練后壓縮 flyfish 曾經是 https://github.com/AutoGPTQ/AutoGPTQ 現在是https://github.com/ModelCloud/GPTQModel 對應論文是 《Accurate Post-Training Quantization for Generative Pre-trained Transformers》 生成式預訓練Tr…

git的使用方法

文章目錄 前言git簡介GIT的基本操作克隆倉庫 (Clone)獲取最新代碼 (Pull)提交代碼到遠程倉庫查看當前分支查看提交代碼的日志git config 配置用戶信息 GIT的實操 前言 git是一種軟件版本管理工具&#xff0c;在多人團隊軟件開發中地方非常重要。 類似與SVN&#xff0c;git工具…

php虛擬站點提示No input file specified時的問題及權限處理方法

訪問站點&#xff0c;提示如下 No input file specified. 可能是文件權限有問題&#xff0c;也可能是“.user.ini”文件路徑沒有配置對&#xff0c;最簡單的辦法就是直接將它刪除掉&#xff0c;還有就是將它設置正確 #配置成自己服務器上正確的路徑 open_basedir/mnt/qiy/te…

使用Langflow和AstraDB構建AI助手:從架構設計到與NocoBase的集成

本文由 Leandro Martins 編寫&#xff0c;最初發布于 Building an AI Assistant with Langflow and AstraDB: From Architecture to Integration with NocoBase。 引言 本文的目標是演示如何創建一個集成了 NocoBase、LangFlow 和 VectorDB 工具的 AI 助手。作為基礎&#xf…

6.聊天室環境安裝 - Ubuntu22.04 - elasticsearch(es)的安裝和使用

目錄 介紹安裝安裝kibana安裝ES客戶端使用 介紹 Elasticsearch&#xff0c; 簡稱 ES&#xff0c;它是個開源分布式搜索引擎&#xff0c;它的特點有&#xff1a;分布式&#xff0c;零配置&#xff0c;自動發現&#xff0c;索引自動分片&#xff0c;索引副本機制&#xff0c;res…

SSL VXN

SSL VPN是采用SSL&#xff08;Security Socket Layer&#xff09;/TLS&#xff08;Transport Layer Security&#xff09;協議來實現遠程接入的一種輕量級VPN技術,其基于B/S架構&#xff0c;免于安裝客戶端&#xff0c;相較與IPSEC有更高的靈活度和管理性&#xff0c;當隧道建立…

【Qt】成員函數指針

一、成員函數指針的本質 與普通函數指針的區別&#xff1a; // 普通函數指針 void (*funcPtr)() &普通函數;// 成員函數指針 void (MyClass::*memberFuncPtr)() &MyClass::成員函數;? 綁定對象&#xff1a;成員函數指針必須與類的實例對象結合使用 ? 隱含 this 指…

通義萬相2.1開源版本地化部署攻略,生成視頻再填利器

2025 年 2 月 25 日晚上 11&#xff1a;00 通義萬相 2.1 開源發布&#xff0c;前兩周太忙沒空搞它&#xff0c;這個周末&#xff0c;也來本地化部署一個&#xff0c;體驗生成效果如何&#xff0c;總的來說&#xff0c;它在國內文生視頻、圖生視頻的行列處于領先位置&#xff0c…

Linux——system V共享內存

共享內存區是最快的IPC(進程內通信)形式&#xff0c;不再通過執行進入內核的系統調用來傳遞彼此的數據 1.共享內存的原理 IPC通信的本質是讓不同的進程先看到同一份資源&#xff0c;然后再進行通信&#xff0c;所以想要通過共享內存進行通信&#xff0c;那么第一步一定是讓兩個…

01 SQl注入基礎步驟(數字、字符、布爾盲注、報錯)

目錄 1、SQL注入漏洞的概要 2、SQL注入的常規思路 3、數字型注入 4、字符型注入 5、布爾盲注 6、報錯注入 1、SQL注入漏洞的概要 原理&#xff1a;通過用戶輸入的數據未嚴格過濾&#xff0c;將惡意SQL語句拼接到原始查詢中&#xff0c;從而操控數據庫執行非預期操作。 …

leetcode-sql數據庫面試題沖刺(高頻SQL五十題)

題目&#xff1a; 620.有趣的電影 表&#xff1a;cinema ------------------------ | Column Name | Type | ------------------------ | id | int | | movie | varchar | | description | varchar | | rating | float | ------------------------ id 是該表的主鍵(具有唯一值…

7.2 奇異值分解的基與矩陣

一、奇異值分解 奇異值分解&#xff08;SVD&#xff09;是線性代數的高光時刻。 A A A 是一個 m n m\times n mn 的矩陣&#xff0c;可以是方陣或者長方形矩陣&#xff0c;秩為 r r r。我們要對角化 A A A&#xff0c;但并不是把它化成 X ? 1 A X X^{-1}A X X?1AX 的形…

在本地部署DeepSeek等大模型時,需警惕的潛在安全風險

在本地部署DeepSeek等大模型時&#xff0c;盡管數據存儲在本地環境&#xff08;而非云端&#xff09;&#xff0c;但仍需警惕以下潛在安全風險&#xff1a; 1. 模型與數據存儲風險 未加密的存儲介質&#xff1a;若訓練數據、模型權重或日志以明文形式存儲&#xff0c;可能被物…

【javaEE】多線程(進階)

1.????前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 親愛的朋友們&#x1f44b;&#x1f44b;&#xff0c;這里是E綿綿呀????。 如果你喜歡這篇文章&#xff0c;請別吝嗇你的點贊????和收藏&#x1f4d6;&#x1f4d6;。如果你對我的…

dify中使用NL2SQL

在 Dify 工作流中融入 NL2SQL&#xff08;自然語言轉 SQL&#xff09;之能力&#xff0c;可依循如下步驟達成&#xff0c;借由 Dify 的模塊化設計以及模型編排之功能&#xff0c;優化數據庫查詢之智能化交互&#xff1a; 一、環境準備與 Dify 部署 安裝 Docker 與 Dify 務須確…

使用Everything搜索指定文件夾中的內容

直接路徑搜索法 在 Everything 的搜索框中輸入文件夾路徑加空格&#xff0c;再輸入要搜索的內容或文件名。如要在 D 盤的 “文檔” 文件夾中搜索名為 “報告.docx” 的文件&#xff0c;可輸入 “D:\ 文檔 報告.docx”235。 高級搜索法 打開 Everything 軟件&#xff0c;點擊菜…