newspaper公共库获取每个 URL 对应的新闻内容,并将提取的新闻正文保存到一个文件中

示例代码:

from newspaper import Article
from newspaper import Config
import json
from tqdm import tqdm
import os
import requestswith open('datasource/api/news_api.json', 'r') as file:data = json.load(file)print(len(data))
save_path = 'datasource/source/news_data.json'
def wr_dict(filename,dic):if not os.path.isfile(filename):data = []data.append(dic)with open(filename, 'w') as f:json.dump(data, f)else:      with open(filename, 'r') as f:data = json.load(f)data.append(dic)with open(filename, 'w') as f:json.dump(data, f)def rm_file(file_path):if os.path.exists(file_path):os.remove(file_path)
# rm_file(save_path)with open(save_path, 'r') as file:have = json.load(file)USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0'config = Config()
config.headers = {'Cookie': "cookie1=xxx;cookie2=zzzz"}
config.browser_user_agent = USER_AGENT
config.request_timeout = 10RETRY_ATTEMPTS = 1
count = 0
def parse_article(url):for attempt in range(RETRY_ATTEMPTS):try:article = Article(url, config=config)article.download()article.parse()return article.textexcept:return None# print(f"Error retrieving article from URL '{url}'")return Nonefor idx, d in enumerate(tqdm(data)):if idx<len(have):continueurl = d['url']maintext = parse_article(url.strip())if maintext == None:continued['body'] = maintextwr_dict(save_path,d)count = count + 1
print(count+len(have))

这段代码的功能是从一个包含新闻 URL 的数据集中获取每个 URL 对应的新闻内容,并将提取的新闻正文保存到一个文件中。

1. 导入必要的库

from newspaper import Article
from newspaper import Config
import json
from tqdm import tqdm
import os
import requests
  • newspaper:用于从新闻网站上提取文章内容,Article 用来获取文章的正文,Config 用来配置请求头和其他设置。
  • json:用于处理 JSON 格式的数据。
  • tqdm:用于显示进度条。
  • os:用于操作文件。
  • requests:用于发送 HTTP 请求(虽然在这段代码中没有直接用到,但可能是为了配置 HTTP 请求的头部)。

2. 加载新闻 URL 数据

with open('datasource/api/news_api.json', 'r') as file:data = json.load(file)print(len(data))
  • datasource/api/news_api.json 文件中读取新闻 URL 数据,并加载到 data 变量中。
  • 输出 data 的长度,显示有多少条新闻 URL 数据。

3. 定义写入 JSON 文件的函数 wr_dict

def wr_dict(filename,dic):if not os.path.isfile(filename):data = []data.append(dic)with open(filename, 'w') as f:json.dump(data, f)else:      with open(filename, 'r') as f:data = json.load(f)data.append(dic)with open(filename, 'w') as f:json.dump(data, f)
  • wr_dict 函数用于将新闻数据字典(dic)追加到指定的 JSON 文件中。如果文件不存在,它会先创建文件并写入数据。如果文件已经存在,先读取文件内容,追加新的数据,再写回文件。

4. 删除文件的函数 rm_file

def rm_file(file_path):if os.path.exists(file_path):os.remove(file_path)
  • rm_file 函数用于删除指定路径的文件。

5. 加载已有的新闻数据

with open(save_path, 'r') as file:have = json.load(file)
  • save_path 文件中读取已经保存的新闻数据,保存到 have 变量中。这样可以避免重复下载和保存相同的新闻。

6. 配置请求头和重试次数

USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Firefox/78.0'
config = Config()
config.headers = {'Cookie': "cookie1=xxx;cookie2=zzzz"}
config.browser_user_agent = USER_AGENT
config.request_timeout = 10
  • 设置请求的 User-Agent(模拟浏览器请求头),以及一些其他配置。
  • 通过设置 config.headers 来模拟用户登录,避免因缺少 cookie 导致访问失败。

7. 定义文章解析函数 parse_article

def parse_article(url):for attempt in range(RETRY_ATTEMPTS):try:article = Article(url, config=config)article.download()article.parse()return article.textexcept:return Nonereturn None
  • parse_article 函数用于下载并解析指定 URL 的新闻文章。它会尝试请求文章,下载并提取文本内容。如果成功则返回文章的正文。如果失败(例如:网络问题或者 URL 无效),则返回 None

8. 处理每条新闻 URL,下载并保存新闻正文

for idx, d in enumerate(tqdm(data)):if idx < len(have):continueurl = d['url']maintext = parse_article(url.strip())if maintext == None:continued['body'] = maintextwr_dict(save_path,d)count = count + 1
print(count + len(have))
  • 迭代 data 中的每一条新闻记录,跳过已经处理过的(if idx < len(have): continue)。
  • 对每个新闻 URL 调用 parse_article 函数,获取新闻正文。
  • 如果成功获取正文,就将其添加到新闻字典(d)的 body 字段中。
  • 使用 wr_dict 函数将包含正文的新新闻字典追加到保存的文件中。
  • count 用于统计成功保存的新闻数量。
  • 最终输出已处理新闻的总数(包括新保存的和之前已经存在的)。

总结:

  1. news_api.json 中获取新闻 URL。
  2. 通过 newspaper 库下载和解析每个 URL 对应的新闻正文。
  3. 如果成功获取正文,就将其保存到 news_data.json 文件中。
  4. 使用进度条(tqdm)显示处理过程的进度。
  5. 使用 wr_dict 函数确保数据正确保存到 JSON 文件中。

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

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

相关文章

前端核心知识:Vue 3 编程的 10 个实用技巧

文章目录 1. **使用 ref 和 reactive 管理响应式数据**原理解析代码示例注意事项 2. **组合式 API&#xff08;Composition API&#xff09;**原理解析代码示例优势 3. **使用 watch 和 watchEffect 监听数据变化**原理解析代码示例注意事项 4. **使用 provide 和 inject 实现跨…

【Web API系列】XMLHttpRequest API和Fetch API深入理解与应用指南

前言 在现代Web开发中&#xff0c;客户端与服务器之间的异步通信是构建动态应用的核心能力。无论是传统的AJAX技术&#xff08;基于XMLHttpRequest&#xff09;还是现代的Fetch API&#xff0c;它们都为实现这一目标提供了关键支持。本文将从底层原理、核心功能、代码实践到实…

[特殊字符] Spring Boot 日志系统入门博客大纲(适合初学者)

一、前言 &#x1f4cc; 为什么日志在项目中如此重要&#xff1f; 在开发和维护一个后端系统时&#xff0c;日志就像程序运行时的“黑匣子”&#xff0c;帮我们记录系统的各种行为和异常。一份良好的日志&#xff0c;不仅能帮助我们快速定位问题&#xff0c;还能在以下场景中…

IP协议之IP,ICMP协议

1.因特网中的主要协议是TCP/IP&#xff0c;Interneet协议也叫TCP/IP协议簇 2.ip地址用点分十进制表示&#xff0c;由32位的二进制表示&#xff0c;两部分组成&#xff1a;网络标识主机标识 3.IP地址分类; A:0.0.0.0-127.255.255.255 B&#xff1a;128.0.0.0-191.255.255.25…

GPIO_ReadInputData和GPIO_ReadInputDataBit区别

目录 1、GPIO_ReadInputData: 2、GPIO_ReadInputDataBit: 总结 GPIO_ReadInputData 和 GPIO_ReadInputDataBit 是两个函数&#xff0c;通常用于读取微控制器GPIO&#xff08;通用输入输出&#xff09;引脚的输入状态&#xff0c;特别是在STM32系列微控制器中。它们之间的主要…

洛古B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全(线性筛/dfs)

B4158 [BCSP-X 2024 12 月小学高年级组] 质数补全 - 洛谷 思路1:线性筛,字符串匹配,枚举 质数筛选 要解决这个问题&#xff0c;首先得找出指定范围内&#xff08;这里是 1 到 10000000&#xff09;的所有质数。常用的质数筛选算法有埃拉托斯特尼筛法&#xff08;埃氏筛&#…

一周学会Pandas2 Python数据处理与分析-Pandas2读取Excel

锋哥原创的Pandas2 Python数据处理与分析 视频教程&#xff1a; 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Excel格式文件是办公使用和处理最多的文件格式之一&#xff0c;相比CSV文件&#xff0c;Excel是有样式的。Pandas2提…

NVIDIA H100 vs A100:新一代GPU架构性能对比分析

一、核心架构演进对比 ‌Ampere架构&#xff08;A100&#xff09;‌采用台积电7nm工艺&#xff0c;集成540亿晶体管&#xff0c;配备6,912个CUDA核心和432个第三代Tensor Core&#xff0c;支持FP16、TF32和INT8精度计算。其显存子系统采用HBM2e技术&#xff0c;80GB版本带宽可…

保护PCBA的不同方法:喷三防漆 vs 镀膜

PCBA&#xff08;印刷电路板组件&#xff09;的防护工艺中&#xff0c;喷三防漆和镀膜&#xff08;如Parylene气相沉积&#xff09;是两种常见技 术。它们在防护目的上类似&#xff0c;但在具体实现方式和应用场景上有显著差异。以下从外观、工艺、性 能、物理性质和成本五个…

VitePress 项目部署 cloudflare page 提示 npm run build 错误

构建的错误信息如下&#xff1a; 09:52:57.975 ➤ YN0000: Done with warnings in 3s 120ms 09:52:58.072 Executing user command: npm run build 09:52:58.817 npm ERR! Missing script: "build" 09:52:58.818 npm ERR! 09:52:58.818 npm ERR! To see a list of …

C++学习之ORACLE③

1.集合运算符 查询部门号是10和20的员工信息&#xff1a; &#xff1f;思考有几种方式解决该问题 &#xff1f; SQL> select * from emp where deptno in(10, 20) SQL> select * from emp where deptno10 or deptno20 集合运算&#xff1a; Select * from emp …

人工智能之数学基础:复矩阵

本文重点 复矩阵是线性代数中以复数为元素的矩阵,是实矩阵在复数域上的自然推广。与实矩阵相比,复矩阵在数学性质、运算规则和应用场景上具有独特性,尤其在量子力学、信号处理、控制理论等领域发挥关键作用。 复矩阵的定义与表示 定义:复矩阵指的是元素含有复数的矩阵。…

华清远见成都中心嵌入式学习总结

一、Linux 基础入门 课程首先介绍了 Linux 系统的六大特性&#xff0c;包括开源、免费、可裁剪等核心优势。重点讲解了文件系统结构&#xff0c;强调根目录&#xff08;/&#xff09;作为唯一入口的树状结构。通过实操学习了 pwd、ls、cd 等基础命令&#xff0c;掌握了绝对路径…

linux安装ollama

俩种方式都可 一、linux通过docker安装ollama镜像 1.下载安装ollama镜像 # 安装 Docker sudo yum install docker sudo systemctl start docker#docker查看所有容器 docker ps -a # 查看所有容器# docker查看指定容器 docker ps -a |grep ollama# 创建模型存储目录&#xff…

Redis 学习目标

&#x1f3af; Redis 学习目标&#xff08;开发者视角&#xff09; ✅ 一、学习完成后能掌握的核心能力&#xff1a; 分类具体内容&#x1f4e6; 基础能力熟练掌握 Redis 五大数据结构&#xff08;String、List、Hash、Set、ZSet&#xff09;&#xff0c;会用也会选对场景&am…

gerrit配置及使用git-lfs

gerrit服务器端配置 下载git-lfs插件 登录Dashboard [Jenkins] (gerritforge.com)&#xff0c;下载对应版本的插件 配置gerrit 将下载的lfs.jar插件放到${GERRIT_SITE}/plugins/下面为所有仓库启用git-lfs 此步骤需要修改 All-projects 仓库配置&#xff0c;步骤如下 1、克隆仓…

深入理解 Linux PATH 环境变量:配置与优化!!!

深入理解 Linux PATH 环境变量&#xff1a;配置与优化 &#x1f680; 欢迎来到 Linux 环境变量的奇妙世界&#xff01;今天我们来聊聊那个让命令行如鱼得水的幕后英雄——PATH 环境变量&#xff01;&#x1f60e; 通过这篇博客&#xff0c;你将学会如何配置它、优化它&#xff…

如何在AMD MI300X 服务器上部署 DeepSeek R1模型?

DeepSeek-R1凭借其深度推理能力备受关注&#xff0c;在语言模型性能基准测试中可与顶级闭源模型匹敌。 AMD Instinct MI300X GPU可在单节点上高效运行新发布的DeepSeek-R1和V3模型。 用户通过SGLang优化&#xff0c;将MI300X的性能提升至初始版本的4倍&#xff0c;且更多优化将…

简化DB操作:Golang 通用仓库模式

介绍 本代码包提供一个用于数据库操作的通用仓库 (GenericRepository)&#xff0c;利用 Golang 和 GORM (Go ORM) 实现。该仓库设计用于简化数据库的 CRUD (创建、读取、更新、删除) 操作&#xff0c;支持批处理、冲突处理、分页查询等高级功能。 主要功能 创建记录 (Create…

JavaWeb 课堂笔记 —— 08 请求响应

本系列为笔者学习JavaWeb的课堂笔记&#xff0c;视频资源为B站黑马程序员出品的《黑马程序员JavaWeb开发教程&#xff0c;实现javaweb企业开发全流程&#xff08;涵盖SpringMyBatisSpringMVCSpringBoot等&#xff09;》&#xff0c;章节分布参考视频教程&#xff0c;为同样学习…