尚硅谷爬蟲note14

一、scrapy

scrapy:為爬取網站數據是,提取結構性數據而編寫的應用框架

1. 安裝

??????? pip install scrapy

或者,國內源安裝

??????? pip install scrapy -i https://pypi.douban.com/simple

2. 報錯

??????? 報錯1)building ‘twisted.test.raiser’ extension

原因:缺少twisted庫

解決:下載twisted庫:

??????? a)cp是python版本

??????? b)amd是操作系統版本

????????安裝twisted庫:

??????? 使用:pip install 拖入twisted路徑

twisted庫安裝完成后,再安裝scrapy庫

??????? 報錯2)提示python -m pip install --upgrade pid

?? 解決:運行python -m pip install --upgrade pid

??????? 報錯3)win32錯誤

? 解決:pip install pypiwin32

??????? 仍然報錯)

??????? 解決:安裝Aanacoda工具

二、創建scrapy項目

1)創建scrapy項目

在終端中創建項目:

??????? scrapy startproject 項目名

2)創建爬蟲文件

???????在spiders文件夾中創建爬蟲文件

a)切入spiders目錄下:

????????cd? 項目名\項目名\spiders

?b) 在spiders文件夾中創建爬蟲文件

??????? scrapy genspider 文件名 要爬取的網頁

?一般情況下,要爬取的網頁之前:不需要添加http協議

??????? 否則start-urls中的路徑不成立

? 原因:start_urls的值是根據allowed_domains進行修改的,如果添加了http協議,allowed_domains的值需要用戶手動修改

import scrapyclass Demo001Spider(scrapy.Spider):# 爬蟲的名字:用于運行爬蟲時,使用的值name = "demo001"# 允許訪問的域名allowed_domains = ["www.baidu.com"]# 起始url地址:指的是第一次要訪問的域名# start_urls是在allowed_domains之前添加1個http://  在allowed_domains之后添加1個/start_urls = ["http://www.baidu.com"]
#執行了 start_urls之后執行的方法    方法中的response就是返回的對象 相當于1)response = urllib.requests.urlopen()    2)response = requests.get()def parse(self, response):pass

?3)運行爬蟲文件

scrapy crawl 爬蟲的名字

?

做了反扒————

?解決:注釋掉君子協議:項目下的setting.py文件中的robots.txt協議

注釋掉:ROBOTSTXT_OBEY = True

?

?三、scrapy項目結構

項目名

??????? 項目名

??????????????? spider文件夾????????(存儲爬蟲文件)

??????????????????????? init????????

??????????????????????? 自定義的爬蟲文件????????(核心功能文件)

??????????????? init

??????????????? items????????(定義數據結構的地方)(爬取的數據包含哪些)

??????????????? middleware????????(中間件)(代理)

??????????????? pipelines????????(管道)(處理下載的數據)

??????????????? settings????????(配置文件)

四、response的屬性和方法

3)4)5)常用

1)response.text

????????獲取響應的字符串

2)response.body

????????獲取響應的二進制數據

3)response.xpath

??????? 直接使用xpath方法解析response中的內容

4)response.extract()

??????? 提取selector對象中的data屬性值

5)response.extract_first()????????

??????? 提取selector對象的第一個數據

五、scrapy工作原理

1). 引擎向spiders要url

2). 引擎將要爬取的url給調度器

3). 調度器將url生成請求對象,放入指定的隊列

4). 從隊列中出隊一個請求

5). 引擎將請求交給下載器進行處理

6).下載器發送請求,向互聯網請求數據

7). 下載器將數據返回給引擎

8). 引擎將數據再次給到spiders

9).spiders通過xpath解析數據

10).? spiders將數據,或者url,給到引擎

11). 引擎判斷該數據,是數據,還是url

??????? a)是數據,交給管道處理

??????? b)還是url,交給調度器處理

六、scrapy shell

??????? scrapy終端

測試xpath和css表達式

免去了每次修改后,運行spiders的麻煩

進入scrapy shell終端:

????????直接在Windows終端輸入:scrapy shell 域名

??????? 使用

??????????????? 終端中直接執行:

????????????????????????scrapy shell 域名

安裝ipython(高亮,補全)

??????? pip install ipython

七、懶加載中的src

有data-original,src用data-original替代

替換前:src = // ul[ @ id = "component_59"] / li // img / @ src
替換后:src = // ul[ @ id = "component_59"] / li // img / @ data-original

當當網練習中的第一張圖片是none

??????? 原因:沒有data-original

 #有data-original,src用data-original替代src = li.xpath('.//img/@data-original').extract_first()# 第一張圖片和其他圖片標簽不一樣,第一張圖片的src是可以使用的   其他圖片的地址是data-originalif src:src = srcelse:#用srcsrc = li.xpath('.//img/@src').extract_first()

當當網:

??????? items.py:

# Define here the models for your scraped items
#
# See documentation in:
# https://docs.scrapy.org/en/latest/topics/items.html
from urllib import responseimport scrapyclass DemoDdwItem(scrapy.Item):# define the fields for your item here like:# name = scrapy.Field()# pass#圖片# src = // ul[ @ id = "component_59"] / li // img / @ srcsrc = scrapy.Field()#名字# alt = // ul[ @ id = "component_59"] / li // img / @ altname = scrapy.Field()#價格# price = //ul[@id = "component_59"]/li//p[@class = "price"]/span[1]/text()price = scrapy.Field()

ddw.py

import scrapyclass NddwSpider(scrapy.Spider):name = "nddw"allowed_domains = ["category.dangdang.com"]start_urls = ["https://category.dangdang.com/cp01.07.30.00.00.00.html"]def parse(self, response):# pass# src、name、price都有共同的li標簽# 所有的selector對象,都可以再次調用xpath方法li_list = response.xpath('//ul[@id = "component_59"]/li')for li in li_list:# .extract()提取數據# 有data-original,src用data-original替代src = li.xpath('.//img/@data-original').extract_first()# 第一張圖片和其他圖片標簽不一樣,第一張圖片的src是可以使用的   其他圖片的地址是data-originalif src:src = srcelse:# 用srcsrc = li.xpath('.//img/@src').extract_first()alt = li.xpath('.//img/@alt').extract_first()price = li.xpath('.//p[@class = "price"]/span[1]/text()').extract_first()print(src, name, price)

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

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

相關文章

merge函數

merge函數 今天在刷lc,從靈神題解中學到的 來源:560. 和為 K 的子數組 - 力扣(LeetCode) java8 merge()方法被引入到HashMap類中,用于簡化鍵值對操作,在處理鍵值對時,提供一個重新映射函數來決…

Notepad++ 8.6.7 安裝與配置全攻略(Windows平臺)

一、軟件定位與核心優勢 Notepad 是開源免費的代碼/文本編輯器,支持超過80種編程語言的高亮顯示,相比系統自帶記事本具有以下優勢: 輕量高效:啟動速度比同類軟件快30%插件擴展:支持NppExec、JSON Viewer等200插件跨文…

建筑兔零基礎自學python記錄39|實戰詞云可視化項目——章節分布10(上)

這次我們來制作《紅樓夢》各章節的分布情況: 源代碼: import pandas as pd import numpy as np import matplotlib.pyplot as pltdf_hlm pd.read_csv("hlm.txt", names["hlm_texts"]).dropna()df_hlm df_hlm[~df_hlm.hlm_texts.s…

C++:#ifndef 頭文件保護機制詳解

在C開發中,頭文件可能會被多個源文件包含,導致編譯錯誤。為了避免這種情況,我們使用了頭文件保護機制(防止重復包含)。 頭文件保護的原理 通過預處理指令#ifndef(如果沒有定義)和#define&…

利用MQ自動取消未支付超時訂單最佳實踐

一、利用MQ自動取消未支付超時訂單最佳實踐 1、基于 RocketMQ 延遲消息 1.1:延遲消息 當消息寫入到 Broker 后,不會立刻被消費者消費,需要等待指定的時長后才可被消費處理的消息,稱為延時消息。 1.2:實現流程 &am…

基于 ChatGPT 創建專屬 GPTs

文章目錄 基于 ChatGPT 創建專屬 GPTs一、效果展示1.1 中文命名專家1.2 行程小助手 二、核心配置2.1 Instructions2.3 Actions 三、Agent 簡介3.1 功能框架3.2 工作流程3.3 意圖識別 四、數據流程 基于 ChatGPT 創建專屬 GPTs ChatGPT 具備定制 GPTs 的能力,能夠通…

Spring Boot WebFlux 中 WebSocket 生命周期解析

Spring Boot WebFlux 中的 WebSocket 提供了一種高效、異步的方式來處理客戶端與服務器之間的雙向通信。WebSocket 連接的生命周期包括連接建立、消息傳輸、連接關閉以及資源清理等過程。此外,為了確保 WebSocket 連接的穩定性和可靠性,我們可以加入重試…

【數據挖掘】異構圖與同構圖

在圖論(Graph Theory)中,異構圖(Heterogeneous Graph)和同構圖(Homogeneous Graph)是兩種不同的圖結構概念,它們的主要區別在于節點和邊的類型是否單一。 1. 異構圖(Hete…

Golang實踐錄:go發布版本信息收集

go發布版本信息收集。 背景 本文從官方、網絡資料收羅有關go的發布歷史概況。主要目的是能快速了解golang不同版本的變更。鑒于官方資料為英文,為方便閱讀,使用工具翻譯成中文,重要特性參考其它資料補充/修改。由于發布版本內容較多&#xf…

【C++】: STL詳解 —— set和map類

目錄 關聯式容器 鍵值對 set set的概念 set的構造函數 set的使用 map map的概念 map的構造函數 map的使用 multiset multimap 關聯式容器 C標準庫提供了多種容器,用于高效管理和操作數據集合。這些容器可分為以下幾類: 順序容器(…

DeepSeek:構筑大數據平臺底座的最優解

一、大數據平臺底座的重要性 在數字化浪潮席卷全球的當下,數據已成為企業乃至整個社會最具價值的資產之一 。大數據平臺底座作為數據處理和業務支撐的核心樞紐,其重要性不言而喻,猶如大廈的基石,關乎整個數據生態系統的穩定與發展。 從數據處理角度來看,隨著互聯網、物聯…

Minix OS的配置 SSH C程序編譯

Minix3的下載 官網:https://www.minix3.org/ 安裝 平臺:VMware 開機后進入系統使用setup命令來配置和安裝盡量配置一個DNS服務器,比如8.8.8.8 SSH 安裝:pkgin install openssh 修改配置文件,需要: 修…

ubuntu20 安裝python2

1. 確保啟用了 Universe 倉庫 在某些情況下,python2-minimal 包可能位于 Universe 倉庫中。你可以通過以下命令啟用 Universe 倉庫并更新軟件包列表: bash復制 sudo add-apt-repository universe sudo apt update 然后嘗試安裝: bash復制…

STM32---FreeRTOS中斷管理試驗

一、實驗 實驗目的:學會使用FreeRTOS的中斷管理 創建兩個定時器,一個優先級為4,另一個優先級為6;注意:系統所管理的優先級范圍 :5~15 現象:兩個定時器每1s,打印一段字符串&#x…

docker利用docker-compose-gpu.yml啟動RAGFLOW,文檔解析出錯【親測已解決】

0.問題說明 想要讓RAGFLOW利用GPU資源跑起來,可以選擇docker-compose-gpu.yml啟動。(但是官網啟動案例是86平臺的不是NVIDIA GPU的,docker-compose-gpu.yml又是第三方維護,所以稍有問題) 1.問題 docker利用docker-c…

【AI深度學習網絡】卷積神經網絡(CNN)入門指南:從生物啟發的原理到現代架構演進

深度神經網絡系列文章 【AI深度學習網絡】卷積神經網絡(CNN)入門指南:從生物啟發的原理到現代架構演進【AI實踐】基于TensorFlow/Keras的CNN(卷積神經網絡)簡單實現:手寫數字識別的工程實踐 引言 在當今…

【ThreeJS Basics 06】Camera

文章目錄 Camera 相機PerspectiveCamera 透視相機正交相機用鼠標控制相機大幅度轉動(可以看到后面) 控制組件FlyControls 飛行組件控制FirstPersonControls 第一人稱控制PointerLockControls 指針鎖定控制OrbitControls 軌道控制TrackballControls 軌跡球…

Linux | Ubuntu 與 Windows 雙系統安裝 / 高頻故障 / UEFI 安全引導禁用

注:本文為 “buntu 與 Windows 雙系統及高頻故障解決” 相關文章合輯。 英文引文,機翻未校。 How to install Ubuntu 20.04 and dual boot alongside Windows 10 如何將 Ubuntu 20.04 和雙啟動與 Windows 10 一起安裝 Dave’s RoboShack Published in…

在 C++ 中,通常會使用 `#define` 來定義宏,并通過這種方式發出警告或提示。

在 C++ 中,通常會使用 #define 來定義宏,并通過這種方式發出警告或提示。 如何實現 GBB_DEPRECATED_MSG 宏: 你可以通過以下方式定義一個宏,顯示棄用警告: #include <iostream>// 定義一個宏,用來打印棄用警告 #define GBB_DEPRECATED_MSG(msg

el-tree右鍵節點動態位置展示菜單;el-tree的節點圖片動態根據節點屬性color改變背景色;加遮罩層(opacity)

一、el-tree右鍵節點動態位置展示菜單 關鍵:@node-contextmenu="handleRightClick"與@node-click=“handleNodeClick” <div class="content"><el-tabs class="tabs" @tab-click="handleClick" v-model="Modal"…