Python爬蟲:基礎爬蟲架構及爬取證券之星全站行情數據!

?

?爬蟲成長之路(一)里我們介紹了如何爬取證券之星網站上所有A股數據,主要涉及網頁獲取和頁面解析的知識。爬蟲成長之路(二)里我們介紹了如何獲取代理IP并驗證,涉及了多線程編程和數據存儲的知識。此次我們將在前兩節的基礎上,對證券之星全站的行情數據進行爬取。第一節的思路爬一個欄目的數據尚可,爬上百個欄目的數據工作量就有點大了。下面我們先介紹下基礎的爬蟲架構。

???????本文主要包含爬蟲框架六大基礎模塊,分別為爬蟲調度器、URL下載器、URL管理器、HTML下載器、HTML解析器、數據存儲器。功能分析如下

???????爬蟲調度器:主要負責統籌其他四個模塊的工作。

?????? URL下載器:主要負責下載需要爬取數據的URL鏈接。

?????? URL管理器:負責管理URL鏈接,維護已經爬取的URL集合和未爬取的URL集合,提供獲取新URL鏈接的接口。

?????? HTML下載器:用于從URL管理器中獲取未爬取的URL鏈接并下載HRML網頁。

?????? HTML解析器:用戶從HTML下載器中獲取已經下載的HTML網頁,解析出有效數據交給數據存儲器。

???????數據存儲器:用于將HTML解析器解析出來的數據通過文件或者數據庫的形式儲存起來。

???????為了方便理解,以下是基礎爬蟲框架運行流程示意圖

???????

?

???????此處介紹文件夾,下面,我們對這6大模塊進行詳細的介紹。

???????一、URL下載器

?????? URL下載器包含兩步,首先下載網站左側導航欄的URL,然后通過導航欄的URL獲取每個子欄目包含的鏈接列表。

???????

????? ?下面是獲取左側導航欄所有鏈接并生成導航文件的代碼

?get_catalog

?????? 下面是獲取每個子欄目所有鏈接的代碼

?get_urls

???????二、URL管理器

?????? URL管理器主要包括兩個變量,一個是已爬取的URL的?集合,另外一個是未爬取的URL的集合。采用Python中的set類型,主要是使用set的去重功能。

?????? URL管理器除了具有兩個URL集合,還需要提供以下接口,用于配合其他模塊使用,接口如下:

???????判斷是否有待取的URL,方法定義為has_new_url()。

???????添加新的URL到未爬取集合中,方法定義為add_new_url(url),add_new_urls(urls)。

???????獲取一個未爬取的URL,方法定義為get_new_url()

?????? 下面為URL管理器模塊的代碼

?UrlManager

???????三、HTML下載器

???????HTML下載器用來下載網頁,這時候需要注意網頁的編碼,已保證下載的網頁沒有亂碼。

?????? 獲取網頁內容時可能會遇到IP被封的情況,所以我們得爬取一個代理IP池,供HTML下載器使用。

????? ?下面是獲取代理IP池的代碼

?get_proxy_ip

?????? 下面是HTML下載器模塊的代碼

?HtmlDownloader

???????四、HTML解析器

?????? HTML解析器主要對HTML下載器下載的網頁內容進行解析,提取想要的內容。

?????? 本文用到的網頁解析方法主要是正則表達式和BeautifulSoup,下面是HTML解析器的代碼

?HtmlParser

???????五、數據存儲器

?????? 數據存儲器主要對解析器解析的數據進行存儲,存儲方式有很多種,本文選用MYSQL數據庫進行存儲。

?????? 解析器把每一頁的股票數據存為了一個數據框,然后通過數據庫連接引擎,把數據框的數據直接存入數據庫。

?????? 以下是數據存儲器的模塊的代碼

?DataOutput

???????六、爬蟲調度器

?????? 爬蟲調度器主要將上述幾個模塊組合起來,合理的分工,高效完成任務。

?????? 爬蟲調度器采用進程池的方式加快了程序執行的效率,下面是爬蟲調度器模塊的代碼

?SpiderMan

?????? 將上述每個模塊的代碼都新建一個py文件放在firstSpider文件夾下,并運行如下主程序即可獲取證券之星全站的股票數據

?main

??????麻雀雖小五臟俱全,以上是用簡單的爬蟲框架實現的一次全站內容爬取,在執行速度和程序偽裝上還有很大提升空間,希望能夠與大家一同交流成長。

Python學習路線匯總:Python所有方向的技術點做的整理,形成各個領域的知識點匯總,它的用處就在于,你可以按照下面的知識點去找對應的學習資源,保證自己學得較為全面:

一、Python所有方向的學習路線

Python所有方向路線就是把Python常用的技術點做整理,形成各個領域的知識點匯總,它的用處就在于,你可以按照上面的知識點去找對應的學習資源,保證自己學得較為全面。

圖片

圖片

二、學習軟件

工欲善其事必先利其器。學習Python常用的開發軟件都在這里了,還有環境配置的教程,給大家節省了很多時間。

圖片

三、全套PDF電子書

書籍的好處就在于權威和體系健全,剛開始學習的時候你可以只看視頻或者聽某個人講課,但等你學完之后,你覺得你掌握了,這時候建議還是得去看一下書籍,看權威技術書籍也是每個程序員必經之路。

圖片

四、入門學習視頻全套

我們在看視頻學習的時候,不能光動眼動腦不動手,比較科學的學習方法是在理解之后運用它們,這時候練手項目就很適合了。

圖片

圖片

五、實戰案例

光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。

圖片

圖片

**學習資源已打包,需要的小伙伴可以戳這里:【學習資料】?

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

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

相關文章

網絡編程學習之tcp

按下*(星號)可以搜索當前光標下的單詞。 Tcp編程的過程 打開網絡設備 Bind:給服務地址把ip號和端口號連接進去 Tcp是有狀態的 Listen是進入監聽狀態,看有沒有客戶端來連接服務器 Tcp比udp消耗過多資源 Upd類似于半雙工&#…

D50SB100-ASEMI逆變焊機專用D50SB100

編輯:ll D50SB100-ASEMI逆變焊機專用D50SB100 型號:D50SB100 品牌:ASEMI 封裝:DSB-5 批號:2024 現貨:50000 正向電流(Id):50A 反向耐壓(VRRM&#xf…

編程語言沒落了?揭開真相的四大謎團、五大趨勢、六大挑戰與七大未來

編程語言沒落了?揭開真相的四大謎團、五大趨勢、六大挑戰與七大未來 在科技飛速發展的今天,有人宣稱編程語言已經沒落,這一觀點似乎讓人困惑不已。然而,真相究竟如何?本文將從四個方面揭示編程語言的現狀,…

【AIGC】二、mac本地采用GPU啟動keras運算

mac本地采用GPU啟動keras運算 一、問題背景二、技術背景三、實驗驗證本機配置安裝PlaidML安裝plaidml-keras配置默認顯卡 運行采用 CPU運算的代碼step1 先導入keras包,導入數據cifar10,這里可能涉及外網下載,有問題可以參考[keras使用基礎問題…

echarts中tooltip添加點擊事件代碼示例

echarts中tooltip添加點擊事件代碼示例_javascript技巧_腳本之家 點擊事件無法使用this 或者 this無法使用:

Qt圖形編輯類使用總結

Qt的圖形編輯通常會涉及以下三個類:QGraphicsView類、QGraphicsScene類及QGraphicsItem類。 QGraphicsView 是構建復雜圖形用戶界面的強大工具,尤其適用于那些需要動態更新、可交互的2D圖形化應用程序,如圖表繪制、流程圖編輯器、游戲地圖顯示等等。通過結合使用 QGraphics…

13--memcache與redis

前言:數據庫讀取速度較慢一直是無法解決的問題,大型網站應對的方式主要是使用緩存服務器來緩解這種情況,減少數據庫訪問次數,以提高動態Web等應用的速度、提高可擴展性。 1、簡介 Memcached/redis是高性能的分布式內存緩存服務器…

ret2csu簡單總結

一個比較進階的rop利用方式。 Why ret to csu? 當程序給的gadget不夠,或者輸入長度受限時,可以考慮利用csu中的眾多gadget以及一個call指令來劫持控制流。 __libc_csu_init 匯編源碼: .text:0000000000400790 ; void __fastcall _libc_c…

無人直播賺錢的底層邏輯是什么?一文揭曉!

當前,網絡直播已經成為各類商家提高曝光和引流獲客的主要渠道之一,這在為商家帶來新機遇的同時,也讓他們因人手不足或資金匱乏等原因而陷入無人問津窘境之中。在此背景下,無人直播軟件一經出現,便引起了眾多商家的關注…

多器官功能障礙綜合征

多器官功能障礙綜合征(Multiple Organ Dysfunction Syndrome,MODS)是指機體在遭受嚴重感染、創傷、休克、大手術等急性疾病過程中,同時或序貫發生兩個或兩個以上器官功能障礙,以致不能維持內環境穩定的臨床綜合征。 MO…

28V飛機庫維修電源在飛機庫中的作用

飛機庫作為飛機停放和維護的重要場所,其設施的完善和電源系統的穩定運行是保證飛機正常運行的前提。隨著我國航空事業的飛速發展,飛機維修行業面臨著越來越大的挑戰。在飛機維修過程中,電源系統作為關鍵組成部分,其穩定性和可靠性…

網絡服務與應用-廣域網技術(華為ip認證學習筆記)

網絡服務與應用 FTP:文件傳輸協議 TCP 傳輸 20 端口發送,21 接收端口 1. 采用 C/S 結構 2. 傳輸模式 (1)ASCII 模式:傳輸文本 (2)二進制模式:傳輸非文本 3. 工作模式 (1&…

LeetCode題練習與總結:尋找旋轉排序數組中的最小值--153

一、題目描述 已知一個長度為 n 的數組,預先按照升序排列,經由 1 到 n 次 旋轉 后,得到輸入數組。例如,原數組 nums [0,1,2,4,5,6,7] 在變化后可能得到: 若旋轉 4 次,則可以得到 [4,5,6,7,0,1,2]若旋轉 …

【MIT 6.5840/6.824】Lab1 MapReduce

MapReduce MapReduce思想實現思路感受 6.5840/6.824 Lab與筆記匯總 本文對應的Lab版本為MIT6.5840-Spring2024的Lab1 本博客只提供思路,不會公開任何代碼 本lab耗時約6h,碼量約500行 MapReduce思想 MapReduce的思想屬于是比較簡單的,分為兩…

3. 排序算法代碼-python

目錄 1.冒泡排序2.快速排序3.插入排序4.希爾排序5.選擇排序6.堆排序7.歸并排序8. 二分查找 1.冒泡排序 冒泡排序""" def BubbleSort(nums):listLength len(nums)while listLength > 0:for i in range(listLength - 1):if nums[i] > nums[i1]:nums[i], n…

References in code to package

【IntelliJ IDEA】IDE學習使用(不時更新)_idea references in code to class-CSDN博客

【筆記】從零開始做一個精靈龍女-畫貼圖階段(上)

此文只是我的筆記,不包全看懂,有問題可評論 PS貼圖加工 1.打開ps 拖入uv圖,新建圖層,設置背景色為灰色,改一下圖層名字 2.按z縮小一下uv圖層,拖入實體uv圖片(目的是更好上色,比如…

鴻蒙語言基礎類庫:【@ohos.util.Vector (線性容器Vector)】

線性容器Vector 說明: 本模塊首批接口從API version 8開始支持。后續版本的新增接口,采用上角標單獨標記接口的起始版本。開發前請熟悉鴻蒙開發指導文檔:gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md點擊或者復制轉到。 Vect…

云原生(Cloud native)

云原生(Cloud native) 一 定義 目前比較權威的定義主要來自Pivotal公司和云原生計算基金會(Cloud Native Computing Foundation,簡稱CNCF)。 1.1 Pivotal 4個要點: DevOps、持續交付、微服務、容器化。六…

【Java后端】Service層讀取yml配置文件中內容

前言 最近寫代碼,看到別人寫的讀取application.yml配置文件中數據,寫的挺規范,挺好的;雖然之前也讀取過yml文件,但用的其他方法,沒這個規范,所以記錄下 正文 假設要讀取視頻地址,…