#筆記# 寫給自己用的小爬蟲

最近完成了一個文旅行業信息聚合的小應用,實現僅從一個入口了解全行業的信息動態,不用一個一個翻看各網站,節省了不少檢索時間。

一、基本思路

明確數據來源。基于前述目標,確定數據源為文化和旅游部管理部門官網,比如各省廳網站、各副省級城市網站,文化和旅游管理部門直屬單位網站,中國文化報電子版,中國旅游報電子版等,目前大約有60多個網站。

寫采集程序。日常使用 Win 系統+ Edge 瀏覽器,故采集程序使用 Python,配合 Selenium 4 來實現。獲取到的數據(標題、鏈接),存儲到 Sqlite3 數據庫。

寫展示網頁。將抓取到的數據進行展示,打開頁后,點擊某個標題,即可跳轉信息源網站,查看對應信息。

二、代碼框架

整個項目代碼框架如下

├─anhui_msg.py                    // 爬蟲1├─get_bozhou.py                   // 爬蟲2├─provinces_msg.py                // 爬蟲3├─province_level_cities.py        // 爬蟲4├─luyoubao_news.py                // 爬蟲5├─wenhuabao_news.py               // 爬蟲6├─newsspider.py                   // 爬蟲共用代碼├─txt2db.py                       // 抓取信息轉存數據庫├─auto_run.bat                    // 自動抓取、轉存、更新腳本├─ahwlmsg.db                      // 保存所有數據的數據庫文├─<DIR> html                      // 展示網頁代碼├─<DIR> provinces                 // 保存各省文化和旅游廳網站信息├─<DIR> province_level_cities     // 保存副省級城市文化旅部網站信息├─<DIR>?txt???????????????????????//?保存安徽省市文化和旅部網站信息

html 目錄下的文件如下:

├─<DIR>static????????????????????//?內含?CSS、JS、圖標├─<DIR>templates                 // 網頁前端模板├─run.bat                        // 本地自動運行網站腳本├─ahwlmsg.db                     // 保存所有數據的數據庫文件├─generate_html.py???????????????//?網頁后端

三、技術棧

采集程序: Python + Selenium4 + SQL

網頁前端: Html + CSS + JQuery

網頁后端 Python + Flask + SQL

四、代碼實現

(一)網頁信息獲取

信息采集代碼總體思路大體一致。均使用 Selenium 模擬瀏覽器打開相應網站,獲取鏈接后,全部保存為本地文件;然后進一步梳理存入數據庫。

以獲取副省級城市文化旅游網站信息為例。基本代碼如下:


def grasp_all_a(url, driver):assert(driver)driver.get(url)print("\033[1;31;40m looking {}... \033[0m".format(url))try:# 等待網頁打開15秒,直至可以定位到<a>標簽。WebDriverWait(driver, 15).until(EC.visibility_of_element_located((By.TAG_NAME,'a')))except:print("timeout")#?獲取網頁上所有的<a>標簽。a_tags = driver.find_elements(By.TAG_NAME, "a")#逐個分析<a>標簽,并分別處理。filename = get_filename(url).rstrip('/')with open("./province_level_cities/" + filename+".txt", 'w', encoding='utf-8') as f:for tag in a_tags:title = tag.get_attribute('title').replace('\n','').strip(' ')href = tag.get_attribute('href')if?title?and?href:if filename not in href:continueelif 'javascript' not in href:f.write(title + "\t" + href + "\n" )elif href:if 'javascript' in href:continueelse:f.write(tag.text.replace('\n','').strip(" ") + "\t" + href + "\n" )driver.quit()

實現邏輯分三步:

1. 準備工作。

2. 打開網頁后,獲取該網頁上所\<A>標簽。

3. 對每一個\<A>標簽的title和href屬性進行分析:沒有title和href則跳出;同時存在時,一看href是不是指向本網站,二看href中是不是包括JavaScript,如果鏈接指向本網站且鏈接中不包括JavaScript,就把A標簽的title、href屬性保存到文件里;只有href屬性且鏈接中不包括JavaScript時,做一點清理后,將href保存到文件中。

(二)網頁避坑設置

由于各種原因,并非所有網頁數據都能成功獲取,所以在打開網頁前需要做一些設置。通過反復調試,以下代碼可滿足多數情況下的需要。

def ready_to_grasp():path?=?r"d:\\webdriver\\msedgedriver.exe"if?os.path.exists(path):sys.path.append(path)else:print("Please?install?webdriver?first.\n")exit(-1)options = Options()options.add_argument('headless')options.add_argument('disable-gpu')options.add_argument('no-sandbox')options.add_argument('incognito')options.add_argument("disable-blink-features=AutomationControlled")options.binary_location?=?r"C:\\Program?Files?(x86)\\Microsoft\\Edge\\Application\\msedge.exe"driver?=?webdriver.Edge(options=options)driver.execute_cdp_cmd('Network.setUserAgentOverride',?\{"userAgent":?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?\AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/119.0.0.0?\Safari/537.36?Edg/119.0.0.0'})return?driver

以上代碼為三部分:一是準備工作;二是設置選項;三是調用執行。代碼本身可以說明。

(三)網頁展示

找個看著比較順眼的網站,保存到本地,去掉不需要的功能,確定前端樣式,形成網頁模板。

后端主要是響應網頁上的操作,查詢數據庫,并將查詢結果從后端向前端傳送等。

圖片

(最終網頁效果)

五、結語

這個周末項目式的“小雪球”,斷斷續續重寫了三遍。目前,程序每天在跑,每天在用,可瀏覽最近一周之內各省、副省級城市和安徽省各市文旅網站發布的信息資訊。

期間,也嘗試接入目前流行的大模型。比如,在鼠標移到網頁上某個標題時,自動連接大模型,在不跳轉頁面的情況下,對其內容進行摘要。

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

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

相關文章

STM32中斷

目錄 stm32中斷原理標準庫高低電平使LED亮滅燈采用串口中斷方式做串口通信 stm32中斷原理 在STM32微控制器中&#xff0c;中斷是一種重要的事件驅動機制&#xff0c;用于處理實時事件而無需持續輪詢。中斷在處理外部事件&#xff08;如按鍵輸入、定時器溢出等&#xff09;時非…

【辦公類-21-18】20240701 養老護理員初級選擇題488,制作PyQt5圖形界面GUI

背景需求&#xff1a; 6月16日育嬰師高級考完了。運氣好&#xff0c;抽到的是”護理患腹瀉的幼兒”&#xff0c;“晨檢與家長溝通”&#xff0c;“4個月嬰兒喂蛋黃”&#xff0c;“21個月食譜”&#xff0c;都是我背過的題目&#xff08;沒有抽到感統&#xff09; 于是一放假&…

【C語言】解決C語言報錯:Invalid Pointer

文章目錄 簡介什么是Invalid PointerInvalid Pointer的常見原因如何檢測和調試Invalid Pointer解決Invalid Pointer的最佳實踐詳細實例解析示例1&#xff1a;未初始化的指針示例2&#xff1a;已釋放的指針示例3&#xff1a;返回局部變量的指針示例4&#xff1a;野指針 進一步閱…

three.js獲取深度圖

在Three.js中&#xff0c;獲取深度圖&#xff08;Depth Map&#xff09;通常涉及幾個步驟。深度圖是一個圖像&#xff0c;其中每個像素的值表示從攝像機到場景中相應點的距離。以下是如何在Three.js中獲取深度圖的基本步驟&#xff1a; 設置WebGLRenderer&#xff1a;確保你的T…

Android裁剪內核后編譯報錯compatibility matrix

【問題描述】&#xff1a; 優化開機速度&#xff0c;裁剪kernel&#xff0c;注釋掉模型模塊后如&#xff1a;# CONFIG_HID_SONY is not set&#xff0c;出現編譯報錯。 checkvintf E 07-01 16:32:02 160 160 check_vintf.cpp:620] files are incompatible: Runtime info a…

《化學工程與裝備》是什么級別的期刊?是正規期刊嗎?能評職稱嗎?

?問題解答 問&#xff1a;《化學工程與裝備》是不是核心期刊&#xff1f; 答&#xff1a;不是&#xff0c;是知網收錄的第一批認定學術期刊。 問&#xff1a;《化學工程與裝備》級別&#xff1f; 答&#xff1a;省級。主管單位&#xff1a;福建石油化工集團有限責任公司 …

昇思25天學習打卡營第6天|網絡構建

網絡構建 概念模型模型參數 概念 神經網絡模型是由神經網絡層和Tensor操作構成的&#xff0c;mindspore.nn提供了常見神經網絡層的實現&#xff0c;在MindSpore中&#xff0c;Cell類是構建所有網絡的基類&#xff0c;也是網絡的基本單元。一個神經網絡模型表示為一個Cell&…

技術革新:如何用數據中臺實現數字化轉型

作為程序員&#xff0c;我們總是對技術如何改變企業運作充滿好奇。今天&#xff0c;我們將深入探討森馬集團如何利用數據中臺技術&#xff0c;實現從傳統數據分析到數字化轉型的華麗轉身。 1. 技術背景&#xff1a;森馬集團的數字化挑戰 森馬集團&#xff0c;一個在服飾行業占…

[單master節點k8s部署]8.pod健康探測

k8s默認的健康檢查機制是&#xff0c;每個容器都有一個監控進程&#xff0c;如果進程退出時返回碼非零&#xff0c;則認為容器發生故障。 存活探測 監測pod是否處于運行狀態&#xff0c;當liveness probe探測失敗的時候&#xff0c;根據重啟策略判斷是否需要重啟。適用于需要…

【Win測試】窗口捕獲的學習筆記

2 辨析筆記 2.1 mss&#xff1a;捕獲屏幕可見區域&#xff0c;不適合捕獲后臺應用 Claude-3.5-Sonnet: MSS庫可以用來捕獲屏幕上可見的內容&#xff1b;然而&#xff0c;如果游戲窗口被其他窗口完全遮擋或最小化&#xff0c;MSS將無法捕獲到被遮擋的游戲窗口內容&#xff0c;而…

天津惠靈頓:從心,致逐夢康橋|在這所天津國際學校從容不迫中走近夢想

在剛剛落下帷幕的申請季中&#xff0c;來自惠靈頓天津校區的Herman&#xff0c;陸續收到了劍橋大學、帝國理工學院、紐約大學、瓦薩學院等10余封錄取通知書。面對紛至沓來的名校肯定&#xff0c;經歷了短暫的塵埃落定的喜悅&#xff0c;Herman很快恢復了往日里的泰然自若。在他…

cv::Mat類的矩陣內容輸出的各種格式的例子

操作系統&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code編程語言&#xff1a;C11 功能描述 我們可以這樣使用&#xff1a;cv::Mat M(…); cout << M;&#xff0c;直接將矩陣內容輸出到控制臺。 輸出格式支持多種風格&#xff0c;包括O…

第5章:Electron加載與顯示內容(2)

5.4 加載和顯示不同類型的資源 Electron 支持加載和顯示多種類型的資源&#xff0c;包括圖片、視頻和其他靜態文件。 5.4.1 加載圖片的示例代碼 index.html&#xff1a; <!DOCTYPE html> <html> <head><title>Load Image</title> </head&…

字符串常量池StringTable

String s1 "a"; 從常量池中取符號a->運行時常量池 ->"a"放入字符串常量池 -> 給s1 String s2 "b"; String s3 s1s2; 創建 new StringBuilder().append("a").append("b").toString() String s4 "a"&q…

鴻蒙使用 @Builder擴展出來的布局數據更新沒法更新UI

由于業務的復雜&#xff0c;所以我們把相關UI抽離出來。但是數據變化了&#xff0c;沒法更新UI Builder MyGridLayout() { } 通過日志打印發現數據的確是更新了&#xff0c;但是UI就沒沒辦法&#xff0c;如何解決呢 Entry Component struct Page35 {// State sArray: bool…

【ajax實戰09】內容管理頁面——刪除功能

本文章目標&#xff1a;點擊刪除圖標實現對應數據刪除 實現步驟如下&#xff1a; 一&#xff1a;將服務器端獲取數據中數據id值綁定到刪除圖標&#xff08;重點&#xff09; 即在渲染時&#xff0c;利用自定義屬性&#xff0c;為td設置id值 <td data-id "${ele.id}…

CEPH client.admin key獲取

通過初始化完畢后&#xff0c;admin節點會在/etc/ceph目標下生成對應的配置文件和對應的key文件&#xff0c;通過ceph orch host add 增加的默認是沒有的 如果很不幸admin節點掛了&#xff0c;怎么在其它節點使用ceph -s 命令呢 啟蒙方法(比較實用) key可以通過ceph auth expor…

chunkers/maxent_ne_chunker/english_ace_multiclass.pickle 找不到

首先在這個nltk_data &#xff1a; NLTK Data官方下的數據集&#xff0c;找不到english_ace_multiclass.pic 說明缺少這個文件 : 那么在 nlp/resources/chunkers/maxent_ne_chunker/english_ace_multiclass.pickle at master teropa/nlp (github.com) 下載那兩個文件 : 然…

在Vue3項目中引入Vite進行熱更新

第一步&#xff1a;初始化一個Vue3項目&#xff0c;可以使用Vue CLI 在開始之前&#xff0c;我們需要確保已經安裝了Vue CLI。可以通過以下命令安裝Vue CLI&#xff1a; bash npm install -g vue/cli 接下來&#xff0c;使用Vue CLI初始化一個Vue3項目&#xff1a; bash vue …

基于SpringBoot的CSGO賽事管理系統

您好&#xff01;我是專注于計算機技術研究的碼農小野。如果您對CSGO賽事管理系統感興趣或有相關開發需求&#xff0c;歡迎隨時聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;SpringBoot框架&#xff0c;Java技術 工具&#xff1a;Eclipse&a…