Scrapy框架的基本使用教程

1、創建scrapy項目

? ? ? ? 首先在自己的跟目錄文件下執行命令:

PS D:\BCprogram\python_pro\bigdata> scrapy startproject theridion_grallatorscrapy + startproject + 項目名 具體執行操作如下:1、創建項目目錄:Scrapy會在當前工作目錄下創建一個名為 theridion_grallator 的新目錄。這個目錄將成為你的Scrapy項目的根目錄。
2、生成基本文件結構:在 theridion_grallator 目錄下,Scrapy會自動生成一套標準的文件和子目錄結構,包括但不限于:theridion_grallator/: 項目根目錄。theridion_grallator/theridion_grallator/: 包含項目的設置文件 (settings.py)、爬蟲模塊(spiders/)、中間件 (middlewares.py)、管道 (pipelines.py) 等核心組件。theridion_grallator/items.py: 定義爬蟲項目中數據模型的地方。theridion_grallator/pipelines.py: 數據處理的管道定義,用于清洗或存儲爬取的數據。theridion_grallator/settings.py: 項目的配置文件,可以設置如用戶代理、下載延遲等參數。theridion_grallator/spiders/: 存放所有爬蟲腳本的目錄,初始時可能為空或包含一個示例爬蟲。scrapy.cfg: 項目的配置文件,位于根目錄,用于指定項目的設置模塊和其他元數據

2、創建一個爬蟲程序?

????????首先進入項目文件夾下,然后輸入命令:?

scrapy genspider 爬蟲程序的名稱? 要爬取網站的域名

D:\BCprogram\python_pro\bigdata\theridion_grallator> scrapy genspider game_4399 4399.com
?

當你運行 scrapy genspider game_4399 4399.com 命令時,Scrapy將執行以下操作:
1、創建爬蟲文件:Scrapy會在 theridion_grallator/spiders/ 目錄下創建一個名為 game_4399.py 的新文件。這個文件將包含你新建的爬蟲的代碼。
2、生成爬蟲模板:打開 game_4399.py 文件,你會看到Scrapy已經為你生成了一個基本的爬蟲模板,包括爬蟲類 Game_4399 和一些默認方法,如 start_requests()、parse() 等。
3、配置爬蟲域:Scrapy在爬蟲類中設置了 allowed_domains 屬性,將其值設為 ['4399.com'],這意味著爬蟲將只對4399.com域名下的URL進行爬取。
4、設置起始URL:在 start_requests() 方法中,Scrapy通常會生成一個請求(Request 對象)到指定的域名(這里為 4399.com),作為爬蟲開始爬取的起點。
5、定義解析函數:parse() 方法是默認的回調函數,當Scrapy收到響應后會調用它來解析網頁內容。你需要根據4399.com網站的HTML結構來定制這個方法,以提取所需的數據。

3、編寫爬蟲程序

在game_4399.py文件中編寫爬蟲代碼,代碼如下

import scrapyclass Game4399Spider(scrapy.Spider):name = "game_4399"  # 爬蟲程序的名稱allowed_domains = ["4399.com"]  # 允許爬取的域名# 默認情況下是:https://4399.com# 但是我們不從首頁開始爬取,所以改一下URLstart_urls = ["https://4399.com/flash/"]  # 一開始爬取的URLdef parse(self, response):  # 該方法用于對response對象進行數據解析# print(response)  # <200 http://www.4399.com/flash/># print(response.text)  # 打印頁面源代碼# response.xpath()  # 通過xpath解析數據# response.css()  # 通過css解析數據# 獲取4399小游戲的游戲名稱# txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()')# txt 列表中的每一項是一個Selector:# <Selector query='//ul[@class="n-game cf"]/li/a/b/text()' data='逃離克萊蒙特城堡'>]# 要通過extract()方法拿到data中的內容# print(txt)# txt = response.xpath('//ul[@class="n-game cf"]/li/a/b/text()').extract()# print(txt)  # 此時列表中的元素才是游戲的名字# 也可以先拿到每個li,然后再提取名字lis = response.xpath('//ul[@class="n-game cf"]/li')for li in lis:# name = li.xpath('./a/b/text()').extract()# # name 是一個列表# print(name)  # ['王城霸業']# 一般我們都會這么寫:li.xpath('./a/b/text()').extract()[0]# 但是這樣如果列表為空就會報錯,所以換另一種寫法# extract_first方法取列表中的第一個,如果列表為空,返回Nonename = li.xpath('./a/b/text()').extract_first()print(name)  # 王城霸業category = li.xpath('./em/a/text()').extract_first()  # 游戲類別date = li.xpath('./em/text()').extract_first()  # 日期print(category, date)# 通過yield向管道傳輸數據dic = {'name': name,'category': category,'date': date}# 可以認為這里是把數據返回給了管道pipeline,# 但是實際上是先給引擎,然后引擎再給管道,只是這個過程不用我們關心,scrapy會自動完成# 這里的數據會在管道程序中接收到yield dic

4、運行scrapy爬蟲程序

在終端輸入命令,就可以看到爬蟲程序運行結果。

scrapy crawl 爬蟲程序名稱

D:\BCprogram\python_pro\bigdata\theridion_grallator> scrapy crawl game_4399

當你運行 scrapy crawl 爬蟲程序名稱 命令時,Scrapy執行以下操作來啟動指定的爬蟲:
1、加載項目設置:Scrapy首先讀取項目根目錄下的 settings.py 文件,加載項目配置。
2、初始化引擎:Scrapy初始化爬蟲引擎,準備開始爬取流程。
3、啟動爬蟲:根據提供的爬蟲名稱,Scrapy會找到對應的爬蟲類(通常在 spiders 目錄下的Python文件中),并實例化這個爬蟲。
4、執行start_requests:Scrapy調用爬蟲類中的 start_requests 方法,這個方法返回一個或多個 Request 對象,表示要發起的HTTP請求。
5、調度請求:每個 Request 對象被添加到調度器(Scheduler)中,等待被發送到下載器(Downloader)。
6、下載網頁:下載器接收到調度器的請求,下載網頁內容,并生成一個 Response 對象。
7、解析響應:下載完成后的 Response 對象被傳遞給爬蟲的解析函數(通常是 parse 或其他自定義的回調函數),在這里,爬蟲解析HTML,提取數據,可能還會生成新的 Request 對象,形成新的爬取循環。
8、處理數據:提取到的數據通常會經過中間件的處理,然后傳遞給管道(Pipelines),在那里進行進一步的清洗、驗證和持久化存儲。
9、錯誤處理:如果在爬取過程中遇到錯誤,比如網絡問題或服務器返回錯誤狀態碼,Scrapy會使用中間件和爬蟲的錯誤處理邏輯來處理這些問題。
10、監控和控制:Scrapy提供了一套日志系統,可以記錄爬取過程中的信息,還可以通過信號和擴展來實現更復雜的控制邏輯。
11、爬蟲結束:當沒有更多的請求待處理,或者達到預設的停止條件(如最大深度、最大請求數等),爬蟲會停止運行。

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

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

相關文章

Git 操作總結

1. 安裝、Git 環境配置 1.1 安裝 Git 官方版本可以在 Git 官方網站下載&#xff1a;打開 https://git-scm.com/download/win&#xff0c;選擇相應版本即可。 Git 安裝完成后&#xff0c;可以在開始菜單中看到 Git 的三個啟動圖標&#xff08;Git Bash、Git CMD、Git GUI&…

koa導出數據為csv文件給前端下載

后端代碼 async userActivityExport(ctx) {const limit ctx.query.limit || 2const offset ctx.query.offset || 0const UserActivity ctx.module.db().entity(userActivity)const findOption {}const ret await UserActivity.findMany_(findOption)const firtCol Objec…

QT5.12環境搭建與源碼編譯

一、概述 QT版本&#xff1a;QT5.12.10 Qt網址&#xff1a;http://download.qt.io/archive/qt/ 編譯平臺 ubuntu18.04 二、安裝交叉編譯工具鏈 1、獲取交叉編譯工具鏈 一般如果是編譯系統如果有對應的gcc 就是用這個就可以了 比如rk3128 lin…

【Qt】QTableWidget設置可以選擇多行多列,并能復制選擇的內容到剪貼板

比如有一個 QTableWidget*m_tbwQuery m_tbwQuery->installEventFilter(this); //進行事件過濾處理//設置可以選擇多行多列 m_tbwQuery->setSelectionMode(QAbstractItemView::MultiSelection); m_tbwQuery->setSelectionBehavior(QAbstractItemView::SelectItems); …

字符串相似度算法完全指南:編輯、令牌與序列三類算法的全面解析與深入分析

在自然語言處理領域&#xff0c;人們經常需要比較字符串&#xff0c;這些字符串可能是單詞、句子、段落甚至是整個文檔。如何快速判斷兩個單詞或句子是否相似&#xff0c;或者相似度是好還是差。這類似于我們使用手機打錯一個詞&#xff0c;但手機會建議正確的詞來修正它&#…

如何為老化的汽車鉛酸電池充電

一項小研究表明&#xff0c;汽車鉛酸電池不同于深循環或固定電池。汽車電池旨在限度地提高啟動電流容量&#xff0c;并且對深度放電或浮充(也稱為第 3 階段充電循環)反應不佳。起動電池的極板結構使表面積化&#xff0c;并且電解液比重 (SG) 高于其他電池&#xff0c;以提供高啟…

C# 實現位比較操作

1、目標 對兩個字節進行比較&#xff0c;統計變化位數、一位發生變化的位數、二位發生變化的位數、多位發生變化的位數。 2、代碼 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

php 跨域問題

設置header <?php $origin isset($_SERVER[HTTP_ORIGIN])? $_SERVER[HTTP_ORIGIN]:;$allow_originarray(http://www.aaa.com,http://www.bbb.com, ); if( $origin in $allow_origin ){header("Access-Control-Allow-Origin:".$origin);header("Access-Co…

Electron Forge 打包更改打包后圖片

確認 ICO 文件有效 確保 icon.ico 文件是有效的并且包含多種分辨率的圖標&#xff08;如 16x16, 32x32, 48x48, 256x256&#xff09;。可以使用工具如 icoconverter 來生成有效的 ICO 文件。 https://icoconvert.com/確認圖標文件路徑 確保圖標文件路徑正確并且文件存在。 確…

O2OA(翱途) 開發平臺之HTTP端口規劃

O2OA(翱途) 開發平臺[下稱O2OA開發平臺或者O2OA]采用相對靈活的系統架構&#xff0c;支持三種服務器運行的方式。本篇主要闡述合并服務運行獨立服務運行代理端口運行三種服務器運行方式。 一、先決條件&#xff1a; 1、O2Server服務器正常運行&#xff0c;系統安裝部署請參考文…

Vue84-Vuex的工作原理與搭建開發環境

一、vuex工作原理 stats&#xff1a;是一個object對象&#xff0c;里面有很多key-value&#xff0c;存放的就是要操作的數據。mutations&#xff1a;是一個object對象&#xff0c;真正去操作stats的人。actions的作用&#xff1a;是一個object對象&#xff0c;當一個動作對應的…

【Spring Boot】關系映射開發(一):一對一映射

關系映射開發&#xff08;一&#xff09;&#xff1a;一對一映射 1.認識實體間關系映射1.1 映射方向1.2 ORM 映射類型 2.實現 “一對一” 映射2.1 編寫實體2.1.1 新建 Student 實體2.1.2 新建 Card 實體 2.2 編寫 Repository 層2.2.1 編寫 Student 實體的 Repository2.2.2 編寫…

DFS,BFS最短路,樹與圖的深度/廣度優先遍歷,拓撲排序

DFS 例題&#xff1a;排列數字 在排列組合問題中&#xff0c;每個位置需要嘗試多個不同的數字組合&#xff0c;需要回溯以嘗試不同的可能性。因此&#xff0c;需要顯式地恢復現場&#xff08;撤銷標記&#xff09;&#xff0c;以確保每個可能的路徑都被探索。 #include <b…

從漣漪到波浪:資產代幣化的變革力量

原文標題&#xff1a;《From ripples to waves: The transformational power of tokenizing assets》撰文&#xff1a;Anutosh Banerjee&#xff0c;Matt Higginson&#xff0c;Julian Sevillano&#xff0c;Matt Higginson編譯&#xff1a;Chris&#xff0c;Techub News本文來…

還是NC,項目代碼開源|scRNA+bulkRNA+因子分析驗證地塞米松治療Covid19

說在前面 平時發文章的話&#xff0c;做藥物用的大多都是僅僅是GEO的bulkRNA&#xff0c;有人的有鼠的&#xff0c;然后做做流水線分析&#xff0c;最后面PCR。今天看一篇發NC的工作量&#xff0c;怎么用轉錄組分析做藥物的轉化免疫學 這篇文章作者已經上傳Github了&#xff…

LabVIEW自動探頭外觀檢測

開發了一套基于LabVIEW的軟件系統&#xff0c;結合視覺檢測技術&#xff0c;實現探頭及連接器外觀的自動檢測。通過使用高分辨率工業相機、光源和機械手臂&#xff0c;系統能夠自動定位并檢測探頭表面的細微缺陷&#xff0c;如劃痕、殘膠、異色、雜物等。系統支持多種探頭形態&…

Spark SQL----數據類型

Spark SQL----數據類型 一、支持的數據類型二、浮點特殊值三、正負無窮語義四、NaN語義五、例子 一、支持的數據類型 Spark SQL和DataFrames支持以下數據類型&#xff1a; Numeric類型 ByteType&#xff1a;表示1字節的帶符號整數。數字的范圍從-128到127。ShortType&#xf…

【C++ OpenCV】機器視覺-二值圖像和灰度圖像的膨脹、腐蝕、開運算、閉運算

原圖 結果圖 //包含頭文件 #include <opencv2/opencv.hpp>//命名空間 using namespace cv; using namespace std;//全局函數聲明部分//我的腐蝕運算 Mat Erode(Mat src, Mat Mask, uint32_t x0, uint32_t y0) {uint32_t x 0, y 0;Mat dst(src.rows, src.cols, CV_8U…

如何在忘記密碼的情況下重置Realme手機?

歡迎閱讀我們關于如何在有或沒有密碼的情況下重置Realme手機的綜合指南。無論您是忘記了密碼&#xff0c;還是只是需要將設備恢復到出廠設置&#xff0c;我們都會為您提供所需的專業提示和技術專長。 發現分步說明、專家提示和行之有效的方法&#xff0c;輕松重新控制您的 Rea…

Hadoop3:集群壓測-讀寫性能壓測

一、準備工作 首先&#xff0c;我們要知道&#xff0c;平常所說的網速和文件大小的MB是什么關系。 100Mbps單位是bit&#xff1b;10M/s單位是byte ; 1byte8bit&#xff0c;100Mbps/812.5M/s。 測試 配置102、103、104虛擬機網速 102上用Python開啟一個文件下載服務&#x…