使用Python爬虫实时监控行业新闻案例
目录
- 背景
- 环境准备
- 请求网页数据
- 解析网页数据
- 定时任务
- 综合代码
- 使用代理IP提升稳定性
- 运行截图与完整代码
- 总结
在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时监控某个行业的新闻,自动化抓取并定期输出这些新闻,Python爬虫可以帮你轻松实现这一目标。
本文将通过一个案例,带你一步一步实现一个简单的Python爬虫,用于实时监控新闻网站的数据。
背景
在某些行业中,获取最新的新闻信息至关重要。通过定期抓取新闻网站的头条新闻,我们可以为用户提供行业热点的动态变化。本文的目标是创建一个爬虫,定期访问一个新闻网站,获取新闻的标题和链接,并打印出来。
环境准备
在开始编写代码之前,我们需要安装几个Python的第三方库:
requests:用于发送HTTP请求。beautifulsoup4:用于解析网页HTML内容。schedule:用于设置定时任务,使爬虫能够自动运行。
可以通过以下命令安装这些库:
pip install requests beautifulsoup4 schedule
请求网页数据
在爬取新闻之前,我们首先要获取目标网页的HTML内容。通过requests库可以方便地发送GET请求,并返回页面内容。以下是请求网页的代码:
import requests# 请求头配置
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'
}# 爬虫请求函数
def fetch_news(url):try:print(f"Attempting to fetch: {url}") # 调试信息response = requests.get(url, headers=HEADERS, timeout=10)print(f"Status code: {response.status_code}") # 打印状态码if response.status_code == 200:return response.textelse:print(f"Failed to fetch {url}. Status code: {response.status_code}")return Noneexcept requests.exceptions.RequestException as e:print(f"Error fetching {url}: {e}")return None
HEADERS用于模拟浏览器访问,避免被网站屏蔽。fetch_news函数发送GET请求并返回网页内容。如果请求成功,则返回HTML内容。
解析网页数据
一旦我们获取了网页的HTML内容,就需要解析这些内容,提取出我们关心的数据(例如新闻标题和链接)。这里我们使用beautifulsoup4来解析HTML并提取新闻数据。
from bs4 import BeautifulSoup# 解析Al Jazeera新闻页面
def parse_aljazeera_page(page_content):soup = BeautifulSoup(page_content, 'html.parser')news_items = []articles = soup.find_all('a', class_='u-clickable-card__link')print(f"Found {len(articles)} articles on Al Jazeera")for article in articles:title_tag = article.find('h3')if title_tag:title = title_tag.text.strip()link = article['href']if link.startswith('http'):news_items.append({'title': title,'link': link})else:# 如果链接是相对路径,拼接完整链接full_link = f"https://www.aljazeera.com{link}"news_items.append({'title': title,'link': full_link})return news_items
BeautifulSoup用于解析HTML内容。parse_aljazeera_page函数从页面中找到所有新闻条目,并提取每个新闻的标题和链接。
定时任务
爬虫的核心功能是定期抓取新闻信息。为了实现这一点,我们可以使用schedule库来设置定时任务,定时运行爬虫。
import schedule
import time# 定时执行任务
def run_scheduler():# 每隔10分钟抓取一次新闻schedule.every(10).minutes.do(monitor_news)while True:print("Scheduler is running...") # 调试信息schedule.run_pending()time.sleep(1)
- 我们使用
schedule.every(10).minutes.do(monitor_news)设置每10分钟执行一次monitor_news函数,获取并输出新闻。
综合代码
将之前的部分代码整合在一起,并加入一个监控新闻的函数:
def monitor_news():url = 'https://www.aljazeera.com/'page_content = fetch_news(url)if page_content:news_items = parse_aljazeera_page(page_content)if news_items:print(f"News from {url}:")for news in news_items:print(f"Title: {news['title']}")print(f"Link: {news['link']}")print("-" * 50)else:print(f"No news items found at {url}.")else:print(f"Failed to fetch {url}.")if __name__ == '__main__':monitor_news() # 手动调用一次,看看是否能抓取新闻run_scheduler() # 继续运行定时任务
使用代理IP提升稳定性
爬虫在运行时,可能会遇到反爬机制导致IP被封禁的情况。为了规避这一问题,我们可以通过配置代理IP来提高爬虫的稳定性。下面是如何使用亮数据代理API的配置示例:
# 代理API配置
PROXY_API_URL = 'https://api.brightdata.com/proxy'
API_KEY = 'your_api_key' # 请替换为实际API密钥
PROXY_API_URL:亮数据的代理API接口地址。API_KEY:你的API密钥,用于认证API请求。
通过修改爬虫的请求函数,将代理配置加到请求中,可以让爬虫通过多个IP地址进行请求,从而降低被封禁的风险:
def fetch_news_with_proxy(url):try:print(f"Attempting to fetch with proxy: {url}") # 调试信息response = requests.get(url,headers=HEADERS,proxies={"http": PROXY_API_URL, "https": PROXY_API_URL},timeout=10)print(f"Status code: {response.status_code}") # 打印状态码if response.status_code == 200:return response.textelse:print(f"Failed to fetch {url}. Status code: {response.status_code}")return Noneexcept requests.exceptions.RequestException as e:print(f"Error fetching {url}: {e}")return None
运行截图与完整代码
运行截图:

完整代码如下
import requests
from bs4 import BeautifulSoup
import schedule
import time# 请求头配置
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'
}# 亮数据代理API配置
PROXY_API_URL = 'https://api.brightdata.com/proxy'
API_KEY = 'your_api_key' # 请替换为实际API密钥# 爬虫请求函数
def fetch_news(url):try:print(f"Attempting to fetch: {url}") # 调试信息response = requests.get(url, headers=HEADERS, timeout=10)print(f"Status code: {response.status_code}") # 打印状态码if response.status_code == 200:return response.textelse:print(f"Failed to fetch {url}. Status code: {response.status_code}")return Noneexcept requests.exceptions.RequestException as e:print(f"Error fetching {url}: {e}")return None# 解析Al Jazeera新闻页面
def parse_aljazeera_page(page_content):soup = BeautifulSoup(page_content, 'html.parser')news_items = []articles = soup.find_all('a', class_='u-clickable-card__link')print(f"Found {len(articles)} articles on Al Jazeera")for article in articles:title_tag = article.find('h3')if title_tag:title = title_tag.text.strip()link = article['href']if link.startswith('http'):news_items.append({'title': title,'link': link})else:# 如果链接是相对路径,拼接完整链接full_link = f"https://www.aljazeera.com{link}"news_items.append({'title': title,'link': full_link})return news_items# 定时任务
def run_scheduler():schedule.every(10).minutes.do(monitor_news)while True:print("Scheduler is running...") # 调试信息schedule.run_pending()time.sleep(1)# 新闻监控函数
def monitor_news():url = 'https://www.aljazeera.com/'page_content = fetch_news(url)if page_content:news_items = parse_aljazeera_page(page_content)if news_items:print(f"News from {url}:")for news in news_items:print(f"Title: {news['title']}")print(f"Link: {news['link']}")print("-" * 50)else:print(f"No news items found at {url}.")else:print(f"Failed to fetch {url}.")# 主程序
if __name__ == '__main__':monitor_news() # 手动调用一次,看看是否能抓取新闻run_scheduler() # 继续运行定时任务
通过这一方式,爬虫不仅能抓取并显示新闻内容,还能避开反爬机制,提升抓取稳定性。
总结
通过上述步骤,我们实现了一个简单的Python爬虫,用于实时抓取Al Jazeera新闻网站的数据,并通过定时任务每隔一定时间自动抓取一次。在爬虫运行过程中,可能会遇到反爬机制导致IP被封禁的情况。为了避免这个问题,我们可以通过配置代理IP来提高爬虫的稳定性。
相关文章:
使用Python爬虫实时监控行业新闻案例
目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...
qt QTextEdit用法总结
1. 基本介绍 QTextEdit 是 Qt 中用于显示和编辑富文本(支持 HTML 子集)和纯文本的控件。 支持文本格式(字体、颜色、对齐)、列表、表格、图片插入等富文本功能。 底层通过 QTextDocument 管理内容,提供强大的文本处理…...
《open3d qt 网格采样成点云》
open3d qt 网格采样成点云 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionMeshUniformSample_triggered();//均匀采样 void MainWindow::...
企业数据安全:切实有效的数据安全保障措施分享:
确保企业数据安全是一项持续不懈的任务,鉴于技术的飞速发展,网络攻击者持续探索新型手段以窃取敏感信息并谋取利益。若企业欲避免成为数据泄露的下一个牺牲品,就必须始终保持警觉,预先规划,以不变应万变。为了帮助企业…...
rocketmq-netty通信设计-request和response
1、NettyRemotingServer启动分析 org.apache.rocketmq.remoting.netty.NettyRemotingServer#start public void start() {this.defaultEventExecutorGroup new DefaultEventExecutorGroup(nettyServerConfig.getServerWorkerThreads(),new ThreadFactory() {private AtomicI…...
DeepSeek 助力 Vue 开发:打造丝滑的卡片(Card)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
计算机组成原理—— 总线系统(十一)
在追求梦想的旅途中,我们常常会遇到崎岖的道路和难以预料的风暴。然而,正是这些挑战塑造了我们的坚韧和毅力,使我们能够超越自我,触及那些看似遥不可及的目标。不要因为一时的困境而气馁,也不要因为他人的质疑而动摇自…...
电商小程序(源码+文档+部署+讲解)
引言 随着移动互联网的快速发展,电商小程序成为连接消费者与商家的重要桥梁。电商小程序通过数字化手段,为消费者提供了一个便捷、高效的购物平台,从而提升购物体验和满意度。 系统概述 电商小程序采用前后端分离的架构设计,服…...
8、k8s的pv和pvc
pv和pvc的概念 静态 动态——>自动分配 pv:persistent volume,持久化存储卷,描述或者定义存储卷的类型。集群范围内的存储概念,代表的是实际的存储空间(本地磁盘、网络系统文件nfs,云存储)…...
【limit 1000000,10 加载很慢该怎么优化?】
在 SQL 数据库中,使用 LIMIT 子句进行分页查询时,如果偏移量(offset)很大,查询性能可能会变得非常差。 这是因为数据库需要扫描和跳过大量的记录才能到达所需的起始位置,然后再取出所需的记录数。 例如,LIMIT 1000000, 10 表示跳过前 100 万条记录,然后取接下来的 10…...
通过IDEA傻瓜式快速分析java堆内存快照
背景 很多开发都觉得分析堆快照查找内存泄漏、大对象等是一个比较需要技术功底的能力,但其实不然,通过IDEA就可以直接快速分析。 操作流程 通过idea直接打开已经找运维或自行dump好的.hprof文件 选中后,IDEA默认会在底部分析器tab展示解析…...
测试方案整理
搜索引擎放在那里?研发 查看问题样本或者在提取再批量入录等情况,一旦我没有勾选或者全选中已经批量入录的样本,那么在直接点击批量提取或查看问题样本的后,会自动默认为选择全选样本还是按照输入错误处理? 批量查看返…...
2025年视觉、先进成像和计算机技术国际学术会议(VAICT2025)
2025年视觉、先进成像和计算机技术国际学术会议(VAICT2025) 2025 International Conference on Vision, Advanced Imaging,and Computer Technology 【重要信息】 二轮截稿时间:2025年3月18日 注册截址时间:2025年4月11日 会…...
【黑马点评】jmeter测试秒杀接口前后耗时,和查询店铺(redis+caffeine二级缓存)接口
【黑马点评】jmeter测试秒杀接口前后耗时,和查询店铺缓存穿透接口 4.测试秒杀接口耗时4.1 修改VoucherOrderController4.2 测试原本的接口耗时 5. 测试缓存穿透 这篇是测试,使用RabbitMQ消息异步处理订单,以及不异步处理订单的耗时对比 以及查…...
盛铂科技 SCP4006/4018/4040:国产袖珍式功率计 射频微波功率探头 平均功率计
在通信、电子测量等领域,功率计是确保信号稳定、系统高效运行的关键设备。盛铂科技自主研发的 SCP4000 系列自带 USB 接口的袖珍式 CW 信号平均功率计,以其卓越的性能、高性价比和便捷的操作,在众多同类产品中脱颖而出,成为行业内…...
数据科学之数据管理|统计学
使用python学习统计 目录 01 统计学基础 7 一、 统计学介绍 7 二、 数据和变量 8 02 描述统计 10 一、 描述统计概述 10 二、 分类变量的描述 11 三、 等距数值变量的描述 13 四、 等比数值变量的描述 16 五、 常用软件包介绍 16 六、 数值变量的描述统计 18 (一)…...
C++ 设计模式-建造者模式
以下是一个完整的C建造者模式示例,包含产品类、建造者接口、具体建造者、指挥者以及测试代码: #include <iostream> #include <string> #include <memory>// 产品类:汽车 class Car { public:void setBody(const std::str…...
从零搭建:Canal实时数据管道打通MySQL与Elasticsearch
Canal实时同步Mysql Binlog至 Elasticsearch 文章目录 Canal实时同步Mysql **Binlog**至**Elasticsearch** 一. 环境准备1.环境检查检查Mysql是否开启BinLog开启Mysql BinlogJava环境检查 2.新建测试库和表3.新建Es索引 二.**部署 Canal Server****2.1 解压安装包****2.2 配置 …...
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#)
Baumer工业相机堡盟工业相机如何通过BGAPI SDK实现一次触发控制三个光源开关分别采集三张图像(C#) Baumer工业相机Baumer工业相机定序器功能的技术背景Baumer工业相机通过BGAPI SDK使用定序器功能预期的相机动作定序器的工作原理 Baumer工业相机通过BGAP…...
网络安全用centos干嘛 网络安全需要学linux吗
网络安全为啥要学Linux系统,据不完全统计,Linux系统在数据中心操作系统上的份额高达70%。它一般运行于服务器和超级计算机上。 所以我们日常访问的网站后台和app后端都是部署在Linux服务器上的,如果你不会Linux系统操作,那么很多…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
#工作记录 构建过程记录 Microsoft Windows [Version 10.0.27871.1000] (c) Microsoft Corporation. All rights reserved.(suna-py3.12) F:\PythonProjects\suna>python setup.py --admin███████╗██╗ ██╗███╗ ██╗ █████╗ ██╔════╝…...
