使用Python實現網頁數據獲取與處理:以財經新聞為例

在現代數據驅動的世界中,獲取并處理豐富的網頁數據是非常重要的技能。本文將介紹如何使用Python編寫一個程序,自動獲取財經新聞數據并進行處理。這不僅可以幫助我們快速獲取最新的財經信息,還可以為后續的數據分析和研究提供支持。

環境準備

首先,確保你的Python環境已經安裝了以下庫:

pip install requests beautifulsoup4 tqdm concurrent.futures

核心代碼解析

我們將分步驟講解代碼實現的關鍵部分。

1. 設置請求頭和會話

為了模擬瀏覽器行為,我們需要設置合適的請求頭:

import requestssession = requests.session()
session.headers['User-Agent'] = ('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 ''(KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
)
session.headers['Referer'] = 'https://money.163.com/'
session.headers['Accept-Language'] = 'zh-CN,zh;q=0.9'
2. 定義主函數和數據獲取邏輯

主函數負責調度和管理整個流程:

def main():base_url = ['https://money.163.com/special/00259BVP/news_flow_index.js?callback=data_callback','https://money.163.com/special/00259BVP/news_flow_biz.js?callback=data_callback','https://money.163.com/special/00259BVP/news_flow_fund.js?callback=data_callback','https://money.163.com/special/00259BVP/news_flow_house.js?callback=data_callback','https://money.163.com/special/00259BVP/news_flow_licai.js?callback=data_callback']kind = ['股票', '商業', '基金', '房產', '理財']path = r'.財經(根數據).json'save_path = r'./財經.json'# 載入已有數據try:if os.path.isfile(path):source_ls = bag.Bag.read_json(path)else:source_ls = []except FileNotFoundError:source_ls = []index = 0urls = []for url in base_url:result = get_url(url, kind[index])index += 1urls = urls + resultnewly_added = []if len(source_ls) == 0:bag.Bag.save_json(urls, path)newly_added = urlselse:flag = [i[1] for i in source_ls]for link in urls:if link[1] in flag:passelse:newly_added.append(link)if len(newly_added) == 0:print('無新數據')else:bag.Bag.save_json(newly_added + source_ls, path)if os.path.isfile(save_path):data_result = bag.Bag.read_json(save_path)else:data_result = []with ThreadPoolExecutor(max_workers=20) as t:tasks = []for url in tqdm(newly_added[:], desc='網易財經'):url: listtasks.append(t.submit(get_data, url))end = []for task in tqdm(tasks, desc='網易財經'):end.append(task.result())bag.Bag.save_json(end + data_result, save_path)
3. 獲取URL和數據

get_url函數負責從特定URL獲取數據鏈接和相關信息:

def get_url(url, kind):num = 1result = []while True:if num == 1:resp = session.get(url)else:if num < 10:resp = session.get(url.replace('.js?callback=data_callback', '') + f'_0{num}' + '.js?callback=data_callback')else:resp = session.get(url.replace('.js?callback=data_callback', '') + f'_{num}' + '.js?callback=data_callback')if resp.status_code == 404:breaknum += 1title = re.findall(r'"title":"(.*?)"', resp.text, re.S)docurl = re.findall(r'"docurl":"(.*?)"', resp.text, re.S)label = re.findall('"label":"(.*?)"', resp.text, re.S)keyword = re.findall(r'"keywords":\[(.*?)]', resp.text, re.S)mid = []for k in keyword:mid1 = []for j in re.findall(r'"keyname":"(.*?)"', str(k), re.S):mid1.append(j.strip())mid.append(','.join(mid1))for i in range(len(title)):result.append([title[i],docurl[i],label[i],kind,mid[i]])return result

get_data函數負責從獲取的鏈接中提取具體內容:

def get_data(ls):resp = session.get(ls[1])resp.encoding = 'utf8'resp.close()html = BeautifulSoup(resp.text, 'lxml')content = []p = re.compile(r'<p.*?>(.*?)</p>', re.S)contents = html.find_all('div', class_='post_body')for info in re.findall(p, str(contents)):content.append(re.sub('<.*?>', '', info))return [ls[-1], ls[0], '\n'.join(content), ls[-2], ls[1]]

運行程序

最后,在主程序中調用主函數:

if __name__ == '__main__':main()

總結

通過這篇教程,我們展示了如何使用Python實現一個自動化數據獲取和處理的程序。這個程序從指定的網址獲取財經新聞,并將其保存到本地文件中。通過這種方式,我們可以輕松地獲取并管理大量的財經信息,為后續的分析和研究提供便利。

希望這篇文章對你有所幫助。如果你有任何問題或建議,歡迎在評論區留言交流。

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

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

相關文章

寶蘭德受邀出席華為開發者大會2024,攜手共繪基礎軟件新篇章

6月21日-23日&#xff0c;華為開發者大會&#xff08;HDC 2024&#xff09;在東莞松山湖舉行&#xff0c;作為全球開發者的年度盛會&#xff0c;本次大會匯聚了眾多業界精英與前沿技術。華為分享了HarmonyOS、盤古大模型、昇騰AI云服務、GaussDB數據庫、自研倉頡編程語言等最新…

微信小程序錄音

微信小程序的錄音功能通過一組API來實現&#xff0c;主要涉及錄音管理器&#xff08;RecorderManager&#xff09;的使用。下面是詳細的實現步驟和代碼示例&#xff1a; 初始化錄音管理器 首先需要獲取錄音管理器的實例&#xff0c;可以通過 wx.getRecorderManager() 方法來獲…

【IM即時通信 功能介紹】客戶端用戶在線狀態訂閱

本文檔旨在介紹客戶端用戶在線狀態訂閱功能&#xff0c;該功能允許開發者通過 SDK 接口實時監控和接收指定用戶的在線或離線狀態變更通知。這一功能對于需要實時交流、狀態同步或用戶活動監控的應用場景至關重要。 功能特點 實時狀態通知 跨平臺通知&#xff1a;訂閱成功后&…

使用 MediaPipe 實現實時手部追蹤和手勢識別 | Rerun展示

點擊下方卡片&#xff0c;關注“小白玩轉Python”公眾號 在本文中&#xff0c;我將展示一個使用 MediaPipe Python 和 Rerun SDK 進行手部追蹤和手勢識別的示例。如果您有興趣深入了解并擴展您的知識&#xff0c;我將指導您如何安裝 MediaPipe Python 和 Rerun SDK 來進行手部追…

深入Scala的變量聲明與類型推斷:語法糖下的智能推導

Scala是一種靜態類型語言&#xff0c;以其強大的類型推斷系統而聞名。變量聲明和類型推斷是Scala編程中的基礎概念&#xff0c;它們共同簡化了代碼的編寫并提高了開發效率。本文將深入探討Scala中變量聲明的語法規則和類型推斷的工作原理。 1. Scala靜態類型的優越性 靜態類型…

深入理解Python中的*和**在函數參數與調用中的奧秘

深入理解Python中的*和**在函數參數與調用中的奧秘 在Python編程中&#xff0c;*和**這兩個操作符在函數參數和函數調用中扮演著特殊的角色。它們分別用于處理位置參數&#xff08;positional arguments&#xff09;和關鍵字參數&#xff08;keyword arguments&#xff09;&am…

Linux部署SVN

一.下載與安裝 &#xff08;1&#xff09;yum安裝 yum install subversion &#xff08;2&#xff09;源文件編譯安裝 ①下載svn源文件 subversion-xxx.tar.gz&#xff08;subversion 源文件&#xff09; subversion-deps-xxx.tar.gz&#xff08;subversion依賴文件&…

RAG項目工期

工期 第一期&#xff0c;基于term的檢索&#xff0c;大模型生成 第二期&#xff0c;搭建前端界面&#xff0c;落地 上傳pdf&#xff0c;一鍵解析&#xff0c;上傳多個pdf 提問 第三期&#xff0c;使用向量檢索&#xff0c;向量數據庫選型 第四期&#xff0c;優化排序。 te…

BatchNorm和LayerNorm

參考鏈接 參考鏈接 參考鏈接

項目四 OpenStack身份管理

任務一 理解身份服務 1.1 ?Keystone的基本概念 ? 認證 &#xff08; Authentication &#xff09; —— 確認用戶身份的過程 &#xff0c;又稱身份驗證 。 ? 憑證 &#xff08; Credentials &#xff09; —— 又 稱憑據&#xff0c;是用于 確認用戶身份的數據 。 ? 令牌…

短視頻最佳時長:成都柏煜文化傳媒有限公司

探索時間與內容之間的完美平衡 成都柏煜文化傳媒有限公司 在數字媒體日益繁榮的今天&#xff0c;短視頻已成為人們獲取信息、娛樂休閑的重要形式。然而&#xff0c;關于短視頻的最佳時長&#xff0c;一直是一個備受爭議的話題。本文將探討短視頻時長的各種考量因素&#xff0…

MySQL報錯Duplicate entry ‘0‘ for key ‘PRIMARY‘

報錯現場 現象解釋 因為你在插入時沒有給 Customer.Id 賦值&#xff0c;MySQL 會傾向于賦值為 NULL。但是主鍵不能為 NULL&#xff0c;所以 MySQL 幫了你一個忙&#xff0c;將值轉換為 0。這樣&#xff0c;在第二次插入時就會出現沖突&#xff08;如果已經有一條記錄為 0&…

微服務——服務治理

目錄 1 什么是服務治理&#xff1f;2 為什么需要服務治理&#xff1f;3 服務治理的關鍵點3.1 服務注冊與發現3.2 負載均衡3.3 容錯與熔斷3.4 服務監控與告警3.5 服務配置管理 4 示例說明5 總結 1 什么是服務治理&#xff1f; 簡單來說&#xff0c;服務治理就是對微服務架構中的…

iptables(11)target(SNAT、DNAT、MASQUERADE、REDIRECT)

簡介 前面我們已經介紹了ACCEPT、DROP、REJECT、LOG,這篇文章我們介紹SNAT、DNAT、MASQUERADE、REDIRECT,這幾個參數的定義我們在上篇文章中都有介紹,我這里再列出回顧一下 DNAT(目標地址轉換)和 SNAT(源地址轉換) 原理:修改數據包的源或目標 IP 地址。通常用于 NAT(…

怎樣利用 MATLAB 進行實時系統的建模與仿真?

要利用MATLAB進行實時系統的建模與仿真&#xff0c;您可以按照以下步驟進行操作&#xff1a; 確定系統的建模方法&#xff1a;根據實際情況&#xff0c;選擇適合的建模方法&#xff0c;如&#xff1a;微分方程、狀態空間模型、傳遞函數模型等。 編寫系統模型的MATLAB代碼&…

小迪安全v2023筆記 1-18

小迪安全v2023筆記 1-18 棱角社區 文章目錄 1. 基礎入門1. 正向shell與反向shell2. web應用3. 抓包&#xff0c;封包&#xff0c;協議&#xff0c;app&#xff0c;小程序&#xff0c;pc應用&#xff0c;web應用 2. 信息打點1. 常見信息獲取2. 文件泄露3. 常見阻礙4. CDN繞過&a…

Java中線程的狀態轉換有什么(生命周期)

在Java中&#xff0c;線程的生命周期由六種主要狀態構成&#xff0c;每種狀態都有其特定的轉換條件。以下是Java線程的生命周期狀態及其轉換條件&#xff1a; 線程狀態 新建&#xff08;NEW&#xff09;&#xff1a; 線程對象已經創建&#xff0c;但尚未調用start()方法。 Thr…

Stable Diffusion——SDXL 1.0原理解析

1. SDXL 1.0 簡介 SDXL 1.0是Stability AI推出的新基礎模型&#xff0c;作為Stable Diffusion的大幅改進版本&#xff0c;它是一個用于文本到圖像合成的潛在擴散模型&#xff08;LDM&#xff09;。作為Stable Diffusion的最新進化&#xff0c;它正在超越其前身&#xff0c;并與…

錄制視頻怎么操作?手把手教會你!

在這個互聯網科技高速發展的時代&#xff0c;錄制視頻已經成為了人們生活中一個不可或缺的技能。無論是記錄游戲精彩瞬間、制作教程、分享生活趣事&#xff0c;還是進行在線教學&#xff0c;錄制視頻都是一種非常直觀有效的方式。可是錄制視頻怎么操作呢&#xff1f;本文將介紹…

駐馬店建筑工程設計資質變更操作要點

150資質變更操作要點&#xff1a; 3806變更原因&#xff1a;若因企業重組、合并、分立、跨省變更等原因導致企業名稱、法定代表人、注冊地址、經濟性質、注冊資本、經營范圍等發生變動&#xff0c;應及時申請資質變更。 1686 變更申請&#xff1a;提交資質變更申請書及…