使用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来提高爬虫的稳定性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/18475.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA安全—Shiro反序列化DNS利用链CC利用链AES动态调试

前言 讲了FastJson反序列化的原理和利用链,今天讲一下Shiro的反序列化利用,这个也是目前比较热门的。 原生态反序列化 我们先来复习一下原生态的反序列化,之前也是讲过的,打开我们写过的serialization_demo。代码也很简单&…

DeepSeek 助力 Vue 开发:打造丝滑的无限滚动(Infinite Scroll)

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…

计算机视觉:卷积神经网络(CNN)基本概念(二)

接上一篇《计算机视觉:卷积神经网络(CNN)基本概念(一)》 二、图像特征 三、什么是卷积神经网络? 四、什么是灰度图像、灰度值? 灰度图像是只包含亮度信息的图像,没有颜色信息。灰度值(Gray Value)是指图…

vscode/cursor 写注释时候出现框框解决办法

一、问题描述 用vscode/cursor写注释出现如图的框框,看着十分难受,用pycharm就没有 二、解决办法 以下两种,哪个好用改那个 (1)Unicode Highlight:Ambiguous Characters Unicode Highlight:Ambiguous Characters &a…

【2.10-2.16学习周报】

文章目录 摘要Abstract一、理论方法介绍1.模糊类增量学习2.Rainbow Memory(RM)2.1多样性感知内存更新2.2通过数据增强增强样本多样性(DA) 二、实验1.实验概况2.RM核心代码3.实验结果 总结 摘要 本博客概述了文章《Rainbow Memory: Continual Learning with a Memory of Divers…

ABP - 事件总线之分布式事件总线

ABP - 事件总线之分布式事件总线 1. 分布式事件总线的集成1.2 基于 RabbitMQ 的分布式事件总线 2. 分布式事件总线的使用2.1 发布2.2 订阅2.3 事务和异常处理 3. 自己扩展的分布式事件总线实现 事件总线可以实现代码逻辑的解耦,使代码模块之间功能职责更清晰。而分布…

Zotero7 从下载到安装

Zotero7 从下载到安装 目录 Zotero7 从下载到安装下载UPDATE2025.2.16 解决翻译api异常的问题 下载 首先贴一下可用的链接 github官方仓库:https://github.com/zotero/zotero中文社区:https://zotero-chinese.com/官网下载页:https://www.z…

typecho快速发布文章

typecho_Pytools typecho_Pytools工具由python编写,可以快速批量的在本地发布文章,不需要登陆后台粘贴md文件内容,同时此工具还能查看最新的评论消息。… 开源地址: GitHub Gitee 使用教学:B站 一、主要功能 所有操作不用登陆博…

Redis7——基础篇(一)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一) 一、Redis定义 官网地址:Redis - The Real-time Data Platform R…

K8s组件

一、Kubernetes 集群架构组件 K8S 是属于主从设备模型(Master-Slave 架构),即有 Master 节点负责集群的调度、管理和运维,Slave 节点是集群中的运算工作负载节点。 主节点一般被称为 Master 节点,master节点上有 apis…

草图绘制技巧

1、点击菜单栏文件–》新建–》左下角高级新手切换–》零件; 2、槽口:直槽口,中心点槽口,三点源槽口,中心点圆弧槽口; 3、草图的约束:需要按住ctrl键,选中两个草图,然后…

一款基于若依的wms系统

Wms-Ruoyi-仓库库存管理 若依wms是一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单。毫无保留给个人及企业免费使用。 前端采用Vue、Element UI。后端采用Spring Boot、Spring Security、Redis & Jwt。权限认证使用Jwt,支持多终…

AWS transit gateway 的作用

说白了,就是根据需要,来起到桥梁的作用,内部沟通,或者面向internet. 先看一下diagram 图: 最中间的就是transit gateway, 要达到不同vpc 直接通讯的目的: The following is an example of a default transit gateway route table for the attachments shown in the previ…

把 CSV 文件摄入到 Elasticsearch 中 - CSVES

在我们之前的很多文章里,我有讲到这个话题。在今天的文章中,我们就提重谈。我们使用一种新的方法来实现。这是一个基于 golang 的开源项目。项目的源码在 https://github.com/githubesson/csves/。由于这个原始的代码并不支持 basic security 及带有安全…

[操作系统] 基础 IO:理解“文件”与 C 接口

在 Linux 操作系统中,“一切皆文件”这一哲学思想贯穿始终。从基础 IO 学习角度来看,理解“文件”不仅仅意味着了解磁盘上存储的数据,还包括对内核如何管理各种资源的认识。本文将从狭义与广义两个层面对“文件”进行解读,归纳文件…

国产编辑器EverEdit - 二进制模式下观察Window/Linux/MacOs换行符差异

1 换行符格式 1.1 应用场景 稍微了解计算机历史的人都知道, 计算机3大操作系统: Windows、Linux/Unix、MacOS,这3大系统对文本换行的定义各不相同,且互不相让,导致在文件的兼容性方面存在一些问题,比如它们…

设计模式Python版 命令模式(下)

文章目录 前言一、命令队列的实现二、撤销操作的实现三、请求日志四、宏命令 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…

Linux:进程概念详解

​ 进程概念详解 一、进程的基本概念 进程在书本上的定义是:计算机中正在运行的程序实例。仅此描述可能让很多人感到困惑。 我们磁盘上存储着.exe文件,启动文件时,文件会从磁盘加载到内存,由CPU对文件的数据和代码进行运算。但…

04性能监控与调优篇(D1_学习前言)

目录 一、引言 二、基本介绍 三、JVM基础 1. java堆 2. 垃圾回收 3. STW 四、调优层次 五、调优指标 六、JVM调优原则 1. 优先原则 2. 堆设置 3. 垃圾回收器设置 1> GC 发展阶段 2> G1的适用场景 3> 其他收集器适⽤场景 4. 年轻代设置 5. 年⽼代设置 …

系统思考—慢就是快

“所有成长,都是一个缓慢渗透的过程,回头看,才发现自己已经走了很远。” —— 余秋雨 这让我想起一个最近做的项目。和一家公司合作,他们的管理模式一直陷入困境,员工积极性低,领导层的决策效率也不高。刚…