使用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.mzph.cn/bicheng/71100.shtml

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

相关文章

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API,通常需要以下步骤: 1. 获取 DeepSeek API 密钥 首先,确保你已经在 DeepSeek 平台上注册并获取了 API 密钥(API Key)。如果没有,请访问 DeepSeek 的官方网站注册并申请 …

AI知识库 - Cherry Studio

1 引言: 最近 DeepSeek 很火啊,想必大家都知道,DeepSeek 这个开源的模型出来后,因其高质量能力和R1 的思维链引发了大家本地部署的热潮。我也不例外,本地部署了一个 14B 的模型,然后把,感觉傻傻…

在 CentOS 上更改 SSH 默认端口以提升服务器安全性

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall ︱vue3-element-admin︱youlai-boot︱vue-uniapp-template 🌺 仓库主页: GitCode︱ Gitee ︱ Github 💖 欢迎点赞 👍 收藏 ⭐评论 …

Unity开发播放视频

Unity开发播放视频 介绍VideoPlayer原理步骤VideoPlayer动态加载 总结 介绍 原生Unity播放视频VideoPlayer播放视频,这里我没有选择使用插件,还有一个播放视频的插件也可以AVPro Video,这里不过多介绍就说一下原生VideoPlayer的基础用法。 …

Next.js【详解】获取数据(访问接口)

Next.js 中分为 服务端组件 和 客户端组件&#xff0c;内置的获取数据各不相同 服务端组件 方式1 – 使用 fetch export default async function Page() {const data await fetch(https://api.vercel.app/blog)const posts await data.json()return (<ul>{posts.map((…

【练习】图论

F. Friendly Group 图中选择一个点-1 边两端点都选择1 边一个端点选择-1 添加链接描述 #include<iostream> using namespace std; #include<vector> #include<cstring> const int N300010; int n,m; vector<int> G[N]; int temp1,temp2; bool vis[N…

【Java集合一】集合概述

一、集合简介 Java 集合框架&#xff08;Collection Framework&#xff09;是 Java 提供的一组用于存储和操作对象的类和接口集合。这些集合类提供了不同的数据结构&#xff0c;使得数据的管理和操作更加方便和高效。 Java 集合框架提供了各种类型的数据结构&#xff0c;如列…

优选驾考小程序

第2章 系统分析 2.1系统使用相关技术分析 2.1.1Java语言介绍 Java语言是一种分布式的简单的 开发语言&#xff0c;有很好的特征&#xff0c;在安全方面、性能方面等。非常适合在Internet环境中使用&#xff0c;也是目前企业级运用中最常用的一个编程语言&#xff0c;具有很大…

什么是平面环形无影光源

平面环形无影光源是一种特殊设计的光源&#xff0c;主要用于消除阴影&#xff0c;提供均匀照明&#xff0c;常见于摄影、显微镜、工业检测等领域。以下是其关键特点和应用&#xff1a; 关键特点 环形设计&#xff1a;光源呈环形&#xff0c;光线从四周均匀照射&#xff0c;减少…

消息队列之-RabbitMq 学习

生产者服务A /消费者服务B 服务A和服务B配置: 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> yaml spring: rabbitmq:host: ${RABBITMQ_HOST:local…

vue 文件下载(导出)excel的方法

目前有一个到处功能的需求&#xff0c;这是我用过DeepSeek生成的导出&#xff08;下载&#xff09;excel的一个方法。 1.excel的文件名是后端生成的&#xff0c;放在了响应头那里。 2.这里也可以自己制定文件名。 3.axios用的是原生的axios&#xff0c;不要用处理过的&#xff…

Java NIO ByteBuffer 详解

什么是 ByteBuffer ByteBuffer 是 Buffer 的一个具体实现&#xff0c;专门用于存储和操作字节数据。它提供了高效的、基于内存的 I/O 数据处理方式。 Buffer 类是构建 Java NIO 的基础&#xff0c;其中 ByteBuffer 类是 Buffer 子类中最受欢迎的。这是因为字节类型是最通用的…

【大语言模型】最新ChatGPT、DeepSeek等大语言模型助力高效办公、论文与项目撰写、数据分析、机器学习与深度学习建模等科研应用

ChatGPT、DeepSeek等大语言模型助力科研应用 随着人工智能技术的快速发展&#xff0c;大语言模型如ChatGPT和DeepSeek在科研领域的应用正在为科研人员提供强大的支持。这些模型通过深度学习和大规模语料库训练&#xff0c;能够帮助科研人员高效地筛选文献、生成论文内容、进行数…

人工智能之数学基础:线性子空间

本文重点 在前面的课程中,我们学习了线性空间,本文我们我们在此基础上学习线性子空间。在应用中,线性子空间的概念被广泛应用于信号处理、机器学习、图像处理等领域。 子空间的性质 子空间是线性空间的一部分,它需要满足下面的性质: 设V是数域F上的线性空间,W是V的一个…

【清晰教程】本地部署DeepSeek-r1模型

【清晰教程】通过Docker为本地DeepSeek-r1部署WebUI界面-CSDN博客 目录 Ollama 安装Ollama DeepSeek-r1模型 安装DeepSeek-r1模型 Ollama Ollama 是一个开源工具&#xff0c;专注于简化大型语言模型&#xff08;LLMs&#xff09;的本地部署和管理。它允许用户在本地计算机…

deepseek部署在本地详细教程

最近&#xff0c;DeepSeek爆火&#xff0c;先进的算法、卓越的能力&#xff0c;表现出众&#xff0c;其凭一己之力推动国内Ai大模型跨越式发展。作为一款现象级的Ai产品&#xff0c;用户量暴增&#xff0c;最近服务器又被攻击&#xff0c;使用DeepSeek&#xff0c;经常出现服务…

DeepSeek v3 技术报告阅读笔记

注 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文本文不包括基础的知识点讲解&#xff0c;为笔记/大纲性质而非教程&#xff0c;建议阅读技术报告原文交流可发送至邮箱 henryhua0721foxmail.com 架构核心 核心&#xff1a; MLA 高效推理DeepSeekMOE 更…

浏览器安全学习

浏览器特性 会将一些特殊符号当做字母进行解析&#xff0c;此时一个符号可能会被解析成两个到三个字母&#xff0c;这样子如果有漏洞对输入做了限制&#xff0c;黑客就可以利用这个特性来绕过某些漏洞中长度限制。某些特殊字符或者其他国家的文字和某些字母的形状一模一样&…

2025年AI免费大战:从DeepSeek到GPT-5的商业逻辑与行业变革

引言&#xff1a;人工智能行业的2025年重大转折 2025年伊始&#xff0c;人工智能行业的竞争格局发生了深刻变化&#xff0c;尤其是以DeepSeek为代表的新兴力量&#xff0c;通过低成本开源策略迅速崛起&#xff0c;迫使OpenAI、百度文心一言等人工智能巨头纷纷调整策略&#xf…

Word写论文常用操作的参考文章

1.插入多个引用文献&#xff1a;word中交叉引用多篇参考文献格式[1-2]操作以及显示错误问题 更改左域名&#xff0c;输入 \#"[0" 更改右域名&#xff0c;输入 \#"0]" 2.插入题注&#xff1a;word 中添加图片题注、目录、内部链接 3.插入公式编号&#x…