爬虫 红网时刻 获取当月指定关键词新闻 并存储到CSV文件

目标网站:红网

爬取目的:为了获取某一地区更全面的在红网已发布的宣传新闻稿,同时也让自己的工作更便捷

环境:Pycharm2021,Python3.10,

安装的包:requests,csv,bs4,datetime

代码如下:(代码中附详细解析)

后续会不断完善,会出界面版,提高大家易用性;同时修改完善代码,设置为可指定获取的时间段的新闻稿。也会陆续更新其他新闻平台的新闻获取爬虫。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2024/3/25 23:05
# @Author : LanXiaoFang
# @Site : 
# @File : redNet.py
# @Software: PyCharm
import csvimport requests
from bs4 import BeautifulSoup
import datetimeheader = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8','Accept - Encoding': 'gzip, deflate, br',"Accept - Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",'Connection': "keep - alive",'Referer': 'https://news-search.rednet.cn/Search?q=%E5%8F%8C%E7%89%8C','User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0","Cookie": "wdcid=7486a2c50eaf8af8; Hm_lvt_c96b65e9975fa39afbd5e90222af5f39=1711378746,1711528844; Hm_lvt_aaecf8414f59c3fb0127932014cf53c7=1711378746,1711528844; __jsluid_s=56e0acf3607072cce852b9d4fc556f54; Hm_lpvt_c96b65e9975fa39afbd5e90222af5f39=1711528844; Hm_lpvt_aaecf8414f59c3fb0127932014cf53c7=1711528844; __jsl_clearance_s=1711530480.242|1|%2F%2BG2WNMEpLXiwlUgRr2hiMkP%2BMg%3D","Upgrade-Insecure-Requests": "1",
}def get_all_indexes(s, char):return [i for i, c in enumerate(s) if c == char]# 获取系统时间
now = datetime.datetime.now()
year = now.year  # 年
month = now.month  # 月
day = now.day  # 日# 创建CSV文件并写入头部信息
with open(str(month) + 'MTitleSP.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow(['序号', '新闻名称', '新闻来源', '媒体级别', '发布日期', '原文链接'])  # 根据实际情况定义列名
with open(str(month) + 'MTitleNSP.csv', 'w', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow(['序号', '新闻名称', '新闻来源', '媒体级别', '发布日期', '原文链接'])  # 根据实际情况定义列名article_no_sp = 1  # 用于计在标题含指定区域的存储的表中的数据的序号
article_no = 1  # 用于计在标题不含但内容含指定区域的存储的表中的数据的序号
get_go = 0  # 获取第几页开始的数据,现在是0开始
count = 0  # 用于计算总共爬取的新闻数量
area = '双牌'  # 爬取指定区域的文章# 相当于满足条件就是一直循环
while get_go >= 0:url = 'https://news-search.rednet.cn/Search?q=%E5%8F%8C%E7%89%8C&s=0&o=1&r=0&p=' + str(get_go)print(url)html = requests.get(url, headers=header)html.encoding = 'utf-8'get_go += 1if html.status_code == 200:soups = BeautifulSoup(html.text, 'html.parser')article_info = soups.find_all('div', class_='result')# print(len(article_info), '\n')for i in article_info:result_info = i.find_all('div', class_='result-info')station_source = result_info[0].select('span')  # 选择result_info下的所有span标签station_info = station_source[0].text  # 文章发布站点source_info = station_source[1].text  # 文章来源print(station_info, source_info)# print(i.find_all('div', class_='title'), '\n')title_info = i.find_all('div', class_='title')# 文章链接article_href = title_info[0].a.get('href')if station_info[3:] == area + "新闻网":# print("双牌新闻网文章链接:", article_href, "---------", "https://moment.rednet.cn/pc" + article_href[22:])article_href = "https://moment.rednet.cn/pc" + article_href[22:]# 修改文章来源为红网时刻if 'rednet' in article_href:source_info = "红网"if 'moment.rednet' in article_href:source_info = "红网时刻"if '来源' in source_info:source_info = station_info[3:]# 文章标题article_title = title_info[0].h3.text# 获取发布时间article_up_time = title_info[0].span.text# 把显示为进入和昨天的时间,改为具体的日期if article_up_time == '今天':article_up_time = str(year) + '.' + str(month) + '.' + str(day)elif article_up_time == '昨天':article_up_time = str(year) + '.' + str(month) + '.' + str(day - 1)# 修改时间显示格式,-替换为.else:# article_up_time = article_up_time[:4] + '.' + article_up_time[5:7] + '.' + article_up_time[8:10] + '.'article_up_time = article_up_time.replace('-', '.')count += 1print(count, '----新闻名称', article_title, '文章来源', source_info, '发布日期', article_up_time, '原文链接',article_href)# 得到这篇文章发布的月份all_index = get_all_indexes(article_up_time, '.')article_up_time_month = article_up_time[all_index[0] + 1:all_index[1]]# 只要本月的,如果获取到的文章是本月之前的则不再获取,退出循环if int(article_up_time_month) < month:print('已经不是这个月的啦', int(article_up_time_month), month)get_go = -1break# 把数据存入表格 根据标题是否含有双牌两个字 分开存储if area in article_title:# 这个是标题含有双牌的with open(str(month) + 'MTitleSP.csv', 'a', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow([article_no_sp, article_title, source_info, '省级', article_up_time, article_href])article_no_sp += 1else:# 这个是标题不含但是内容含有双牌的with open(str(month) + 'MTitleNSP.csv', 'a', newline='', encoding='utf-8') as csvfile:writer = csv.writer(csvfile)writer.writerow([article_no, article_title, '省级', source_info, article_up_time, article_href])article_no += 1

由于现在是2024年4月1日 13:04,文章更新的本月的不多。

运行结果如下:

  

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

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

相关文章

非关系型数据库(缓存数据库)redis的高可用(持久化)

目录 1.redis的高可用 2.Redis持久化 1.Redis 提供两种方式进行持久化 2.RDB持久化 2.1触发条件 2.1.1手动触发 2.1.2自动触发 2.1.3其他自动触发机制 2.2执行流程 ​编辑 2.3 启动时加载 3.AOF持久化 3.1开启AOF 3.2 执行流程 3.2.1append——命令追加 3.…

【OpenCV-颜色空间】

OpenCV-颜色空间 ■ RGB■ BGR■ HSV■ HSL■ HUE■ YUV ■ RGB ■ BGR BGR 就是RGB R和B调换位置。 OpenCV 默认使用BGR ■ HSV ■ HSL ■ HUE ■ YUV

Springboot集成knife4j (swagger)

1、添加依赖 在pom.xml 文件中添加 knife4j-spring-boot-starter 的依赖 <dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-spring-boot-starter</artifactId> <version>3.0.3</version> </depe…

【JavaScript】JS高级语法

目录 1.变量与函数 1.1作用域 1.2定义变量 1.3作用域链 1.4闭包 1.5预解析 1.6let提升 1.7函数参数 1.8箭头函数 2.解构赋值 3.1数组解构 3.2对象解构 3.对象 4.1字面量创建对象 4.2构造函数 4.2.1自定义构造函数 4.2.2静态成员和实例成员 4.数据类型 4.1引…

游戏引擎中的物理系统

一、物理对象与形状 1.1 对象 Actor 一般来说&#xff0c;游戏中的对象&#xff08;Actor&#xff09;分为以下四类&#xff1a; 静态对象 Static Actor动态对象 Dynamic Actor ---- 可能受到力/扭矩/冲量的影响检测器 TriggerKinematic Actor 运动学对象 ---- 忽略物理法则…

EFK(elasticsearch+filebeat+kibana)日志分析平台搭建

本文是记录一下EFK日志平台的搭建过程 项目背景&#xff1a; 此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式)&#xff0c;这些日志都已经按照不同环境输出到/home/dev /home/test1 /home/test2 目录下了&#xff0c;按照不同的应…

Taro + vue3 小程序封装标题组件

分为没有跳转页面的title组件和 有跳转页面的title组件 我们可以把这个封装成一个组件 直接上代码 <template><div class"fixed-title-container"><div class"box"><div class"icon" v-if"isShow" click"…

Topaz Video AI for Mac v5.0.0激活版 视频画质增强软件

Topaz Video AI for Mac是一款功能强大的视频处理软件&#xff0c;专为Mac用户设计&#xff0c;旨在通过人工智能技术为视频编辑和增强提供卓越的功能。这款软件利用先进的算法和深度学习技术&#xff0c;能够自动识别和分析视频中的各个元素&#xff0c;并进行智能修复和增强&…

【JavaWeb】Day31.SpringBootWeb请求响应——分层解耦(二)

3.IOC&DI 3.1 IOC&DI入门 完成Controller层、Service层、Dao层的代码解耦 思路&#xff1a; 1. 删除Controller层、Service层中new对象的代码 2. Service层及Dao层的实现类&#xff0c;交给IOC容器管理 3. 为Controller及Service注入运行时依赖的对象 Controller程序…

Appium无线自动化实用教程

文章目录 简介核心特点工作原理使用Appium进行自动化测试的一般步骤 环境设置安装和启动Appium Server使用Node.js和npm安装Appium Server&#xff1a;启动Appium Server:命令行启动使用Appium Desktop安装和启动Appium Server&#xff1a;使用代码启动appium server 编写测试代…

勒索病毒最新变种.rmallox勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 随着信息技术的飞速发展&#xff0c;网络安全问题日益突出&#xff0c;其中勒索病毒便是近年来备受关注的网络安全威胁之一。在众多勒索病毒中&#xff0c;.rmallox勒索病毒以其独特的传播方式和强大的加密能力&#xff0c;给广大用户带来了极大的困扰。本文…

rust项目组织结构和集成测试举例

概述 在学习rust的过程中&#xff0c;当项目结构略微复杂的时候&#xff0c;写集成测试的时候发现总是不能引用项目中的代码&#xff0c;导致编写测试用例失败。查阅了教程&#xff0c;一般举例都很简单。查阅了谷歌和百度以及ai&#xff0c;也没有找到满意的答案。这里记录一…