基于Python的新聞爬蟲:實時追蹤行業動態

引言

在信息時代,行業動態瞬息萬變。金融從業者需要實時了解政策變化,科技公司需要跟蹤技術趨勢,市場營銷人員需要掌握競品動向。傳統的人工信息收集方式效率低下,難以滿足實時性需求。Python爬蟲技術為解決這一問題提供了高效方案。

本文將詳細介紹如何使用Python構建新聞爬蟲系統,實現行業動態的實時追蹤。我們將從技術選型、爬蟲實現、數據存儲到可視化分析進行完整講解,并提供可運行的代碼示例。

1. 技術方案設計

1.1 系統架構

完整的新聞追蹤系統包含以下組件:

  • 爬蟲模塊:負責網頁抓取和數據提取
  • 存儲模塊:結構化存儲采集的數據
  • 分析模塊:數據處理和特征提取
  • 可視化模塊:數據展示和趨勢分析
  • 通知模塊:重要新聞實時提醒

1.2 技術選型

組件技術方案優勢
網頁抓取Requests/Scrapy高效穩定
HTML解析BeautifulSoup/lxml解析精準
數據存儲MySQL/MongoDB結構化存儲
數據分析Pandas/Numpy處理便捷
可視化Matplotlib/PyEcharts直觀展示
定時任務APScheduler自動化運行

2. 爬蟲實現

2.1 基礎爬蟲實現

我們以36氪快訊(https://36kr.com/newsflashes)為例,抓取實時行業快訊。

import requests
from bs4 import BeautifulSoup
import pandas as pddef fetch_36kr_news():url = "https://36kr.com/newsflashes"headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')news_items = []for item in soup.select('.newsflash-item'):title = item.select_one('.item-title').text.strip()time = item.select_one('.time').text.strip()abstract = item.select_one('.item-desc').text.strip()link = "https://36kr.com" + item.select_one('a')['href']news_items.append({"title": title,"time": time,"abstract": abstract,"link": link})return news_items# 測試抓取
news_data = fetch_36kr_news()
df = pd.DataFrame(news_data)
print(df.head())

2.2 反反爬策略

為防止被網站封禁,需要采取以下措施:

  1. 設置隨機User-Agent
  2. 使用代理IP池
  3. 控制請求頻率
  4. 處理驗證碼
from fake_useragent import UserAgent
import random
import time
import requests# 代理信息
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"def get_random_headers():ua = UserAgent()return {"User-Agent": ua.random,"Accept-Language": "en-US,en;q=0.9","Referer": "https://www.google.com/"}def fetch_with_retry(url, max_retries=3):# 設置代理proxyMeta = f"http://{proxyUser}:{proxyPass}@{proxyHost}:{proxyPort}"proxies = {"http": proxyMeta,"https": proxyMeta,}for i in range(max_retries):try:response = requests.get(url, headers=get_random_headers(),proxies=proxies,timeout=10)if response.status_code == 200:return responsetime.sleep(random.uniform(1, 3))except requests.exceptions.RequestException as e:print(f"Attempt {i+1} failed: {str(e)}")time.sleep(5)return None

3. 數據存儲與管理

3.1 MySQL存儲方案

import pymysql
from datetime import datetimedef setup_mysql_db():connection = pymysql.connect(host='localhost',user='root',password='yourpassword',database='news_monitor')with connection.cursor() as cursor:cursor.execute("""CREATE TABLE IF NOT EXISTS industry_news (id INT AUTO_INCREMENT PRIMARY KEY,title VARCHAR(255) NOT NULL,content TEXT,publish_time DATETIME,source VARCHAR(100),url VARCHAR(255),created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP)""")connection.commit()return connectiondef save_to_mysql(news_items):conn = setup_mysql_db()with conn.cursor() as cursor:for item in news_items:cursor.execute("""INSERT INTO industry_news (title, content, publish_time, source, url)VALUES (%s, %s, %s, %s, %s)""", (item['title'], item['abstract'], item['time'], '36kr', item['link']))conn.commit()conn.close()

3.2 數據去重方案

def check_duplicate(title):conn = setup_mysql_db()with conn.cursor() as cursor:cursor.execute("SELECT COUNT(*) FROM industry_news WHERE title = %s", (title,))count = cursor.fetchone()[0]conn.close()return count > 0

4. 數據分析與可視化

4.1 關鍵詞提取

import jieba.analyse
from collections import Counterdef extract_keywords(texts, top_n=20):all_text = " ".join(texts)keywords = jieba.analyse.extract_tags(all_text, topK=top_n)return keywords# 從數據庫讀取新聞內容
def get_news_contents():conn = setup_mysql_db()with conn.cursor() as cursor:cursor.execute("SELECT content FROM industry_news")contents = [row[0] for row in cursor.fetchall()]conn.close()return contentscontents = get_news_contents()
keywords = extract_keywords(contents)
print("Top Keywords:", keywords)

4.2 可視化展示

import matplotlib.pyplot as plt
from wordcloud import WordClouddef generate_wordcloud(keywords):wordcloud = WordCloud(font_path='simhei.ttf',background_color='white',width=800,height=600).generate(" ".join(keywords))plt.figure(figsize=(12, 8))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.show()generate_wordcloud(keywords)

5. 總結

本文介紹了基于Python的新聞爬蟲系統實現方案,從數據采集、存儲到分析可視化的完整流程。這套系統可以:

  • 實時監控多個新聞源
  • 自動識別重要行業動態
  • 提供數據分析和趨勢預測
  • 支持多種通知方式

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

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

相關文章

阿里視頻直播解決方案VS(MediaMTX + WebRTC) 流媒體解決方案

背景: 公司采購了新的攝像頭,通過rtsp或者rtmp推流到云平臺,云平臺內部進行轉碼處理,客戶端使用HLS或HTTP-FLV播放,移動App可能使用HLS或私有SDK,超低延時則采用WebRTC。 技術選型: RTSP&…

day33:零基礎學嵌入式之網絡——TCP并發服務器

一、服務器1.服務器分類單循環服務器:只能處理一個客戶端任務的服務器并發服務器:可同時處理多個客戶端任務的服務器二、TCP并發服務器的構建1.如何構建?(1)多進程(每一次創建都非常耗時耗空間,…

VR全景制作的流程?VR全景制作可以用在哪些領域?

VR全景制作的流程?VR全景制作可以用在哪些領域?VR全景制作:流程、應用與未來虛擬現實(VR)全景制作正迅速改變我們的感官體驗,使我們能夠身臨其境地探索虛擬世界,享受沉浸式的奇妙感受。那么&…

用LangChain重構客服系統:騰訊云向量數據庫+GPT-4o實戰

人們眼中的天才之所以卓越非凡,并非天資超人一等而是付出了持續不斷的努力。1萬小時的錘煉是任何人從平凡變成超凡的必要條件。———— 馬爾科姆格拉德威爾 目錄 一、傳統客服系統痛點與重構價值 1.1 傳統方案瓶頸分析 1.2 新方案技術突破點 二、系統架構設計&…

主要分布在腹側海馬體(vHPC)CA1區域(vCA1)的混合調諧細胞(mixed-tuning cells)對NLP中的深層語義分析的積極影響和啟示

腹側海馬體CA1區(vCA1)的混合調諧細胞(mixed-tuning cells)通過整合情感、社會關系、空間概念等多模態信息,形成動態的情景化語義表征,為自然語言處理(NLP)的深層語義分析提供了重要…

ESP32的ADF詳解:6. Audio Processing的API

一、Downmix 1. 核心功能 將基礎音頻流和新加入音頻流混合為單一輸出流,支持動態增益控制和狀態轉換。輸出聲道數與基礎音頻一致,新加入音頻自動轉換聲道匹配。2. 關鍵特性聲道處理 輸出聲道數 基礎音頻聲道數新加入音頻自動轉換聲道(如立體…

Qt(基本組件和基本窗口類)

一、基本組件1. Designer設計師為什么要上來先將這個東西呢,這個是QT外置的設計界面的工具,沒啥用,所以了解一下。我們用的多的是QT內置的界面設計,只需要我們雙擊我們創建的項目的.ui文件就可以進入這個界面,你對界面…

docker與k8s的容器數據卷

Docker容器數據卷 特性 docker鏡像由多個只讀層疊加而成,啟動容器時,Docker會加載只讀鏡像層并在鏡像棧頂部添加一個讀寫層。如果運行中的容器修改了現有的一個已經存在的文件,那么該文件將會從讀寫層下面的只讀層復制到讀寫層,該…

自然語言處理技術應用領域深度解析:從理論到實踐的全面探索

1. 引言:自然語言處理的技術革命與應用前景 自然語言處理(Natural Language Processing,NLP)作為人工智能領域的核心分支,正在以前所未有的速度改變著我們的數字化生活。從最初的規則基礎系統到如今基于深度學習的大語言模型,NLP技術經歷了從理論探索到實際應用的深刻變…

OpenGLRender開發記錄(二): 陰影(shadowMap,PCF,PCSS)

目錄已實現功能陰影shadowMapPCFPCSS實現shadowMapPCFPCSS陰影GitHub主頁:https://github.com/sdpyy1 OpenGLRender:https://github.com/sdpyy1/CppLearn/tree/main/OpenGL 已實現功能 除了上次實現IBL之外,項目目前新增了imGUI的渲染,更方便…

Linux:日志亂碼

1、Linux日志亂碼可能是XShell客戶端編碼沒設置為UTF-8引起的,按照以下步驟,設置終端格式:中文版:打開Xshell會話屬性(文件→屬性→終端→編碼),選擇與服務器一致的編碼格式(如UTF-8…

Rouge:面向摘要自動評估的召回導向型指標——原理、演進與應用全景

“以n-gram重疊量化文本生成質量,為摘要評估提供可計算標尺” Rouge(Recall-Oriented Understudy for Gisting Evaluation) 是由 南加州大學信息科學研究所(ISI)的Chin-Yew Lin 于2004年提出的自動文本摘要評估指標&am…

[STM32][HAL]stm32wbxx 超聲波測距模塊實現(HY-SRF05)

前言 在電子技術應用中,距離測量是一個常見且重要的需求。超聲波模塊因其測量精度較高、成本較低、易于使用等優點,被廣泛應用于機器人避障、液位檢測、智能停車系統等領域。該文主要講解以stm32wb芯片為主控,用HAL庫來對HY-SRF05超聲波模塊進行代碼編寫,實現基本的驅動和測…

MySQL 性能調優實戰指南:從診斷到優化全解析

引言在日常的數據庫運維工作中,我們經常需要對 MySQL 數據庫進行診斷和性能分析。本文將介紹一套全面的 MySQL 診斷腳本,適用于 MySQL 8.0(兼容 8.0.15 及以上版本),涵蓋事務鎖分析、性能瓶頸定位、配置檢查、連接狀態…

8. 狀態模式

目錄一、應用背景二、狀態模式2.1 解決的問題2.2 角色2.3 實現步驟三、通用設計類圖四、實現4.1 設計類圖4.2 狀態轉換圖4.3 代碼實現一、應用背景 某對象發生變化時,其所能做的操作也隨之變化。應用程序的可維護性和重用性差代碼的邏輯較復雜 二、狀態模式 2.1 …

php語法--foreach和in_array的使用

文章目錄foreach基礎語法:案例1:引用傳遞模式:嵌套數組處理:避免在循環中計算數組長度:使用引用減少內存拷貝:打印數組in_array基礎使用嚴格使用foreach 基礎語法: foreach ($iterable as $va…

ES6模塊詳解:核心語法與最佳實踐

以下是 EMAScript 6(ES6)模塊規范的核心要點及細節解析: 📦 一、核心語法導出(export) 命名導出:支持導出多個具名成員。export const a 1; export function b() { /* ... */ } // 或集中導出 …

Python day25

浙大疏錦行 Python day25. 內容: 異常處理,在日常的編碼工作過程中,為了避免由于各種bug導致的異常情況,我們需要引入異常處理機制,它的工作場景是當程序運行出現意外時,可以根據編碼規則處理響應的錯誤。…

mac llama_index agent算術式子計算示例

本文通過簡單數學計算,示例llama_index使用agent解決復雜任務過程。 假設mac本地llama_index環境已安裝,過程參考 mac測試ollama llamaindex-CSDN博客 測試mac筆記本內存8G,所以使用較小LLM完成示例。 ollama pull qwen3:1.7b qwen3:1.7b能…

uni-app小程序云效持續集成

創建項目 必須是 cli 命令行創建的 uni-app 小程序項目參考uni-app官方構建命令: npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project生成小程序代碼上傳密鑰 管理-開發設置-小程序代碼上傳生成的文件放在根目錄即可 安裝持續集成插件 pnpm install uni-mi…