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

news2024/10/6 9:21:37

目标网站:红网

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

环境: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 csv

import requests
from bs4 import BeautifulSoup
import datetime

header = {
    '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 += 1

    if 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 += 1
            print(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 = -1
                break

            # 把数据存入表格 根据标题是否含有双牌两个字 分开存储
            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 += 1
            else:
                # 这个是标题不含但是内容含有双牌的
                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.coloradmin.cn/o/1566492.html

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

相关文章

锂电池充电电压4.2V,那么充电器升压到9V、12V意义何在?

锂电池充电电压4.2V&#xff0c;那么充电器升压到9V、12V意义何在&#xff1f;PD、QC等快充又是如何工作&#xff1f;带着这些问题&#xff0c;笔者阅读了一些大佬的分析&#xff0c;在此整理下来&#xff0c;并略抒愚见。 手机快充协议简介&#xff0c;PD&#xff0c;PE&#…

01-XML-04XML处理

XML处理 DOM DOM解析要求解析器将整个XML文件全部加载到内存中&#xff0c;生成一个Document对象。 优点&#xff1a;元素和元素之间保留结构&#xff0c;关系&#xff0c;可以针对元素进行增删改查操作。 缺点&#xff1a;如果XML文件过大&#xff0c;可能会导致内存溢出。SA…

自动驾驶之心规划控制笔记

Search-based Path Planning Methods Path Finding Problem 一般来说指标有距离,耗费时间,能量,或者多目标。 左图是拓扑地图,蓝色的点就是顶点,绿色的线是连接关系。最后得到的是一个从哪里走的一个最优,并非精细解。 右图是栅格地图,这个搜索出来的是在相对分辨率比…

vue快速入门(四)v-html

注释很详细&#xff0c;直接上代码 上一篇 新增内容 使用v-html将文本以html的方式显示 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, …

147.【2024Java八股-全网最全-10w字】

100道Java经典面试题 (一)、准备篇1.HR如何筛选简历?2.部门负责人如何筛选简历?3.简历模块布局4.应届生如何找到合适的练手项目?5.深入学习哪些业务模块呢?6.Java程序员的面试过程 (二)、Redis篇1.redis经常使用在哪些场景?2.Redis进行查询的流程是什么?3.什么是缓存穿透…

软件设计师28--SQL语言

软件设计师28--SQL语言 考点1&#xff1a;普通查询SQL语言SQL语言 - 查询例题&#xff1a; 考点2&#xff1a;分组查询SQL语言 - 查询例题&#xff1a; 考点3&#xff1a;权限控制SQL语言例题&#xff1a; 考点1&#xff1a;普通查询 SQL语言 SQL语言 - 查询 例题&#xff1a;…

又一AI工具开源!企业应该如何搭上这趟AI快车

大模型技术在近两年来飞速发展&#xff0c;企业对大模型的认知更加理性、务实。大模型本身不会直接产生价值&#xff0c;但在大模型基础架构之上开发出的AI应用&#xff0c;带来技术创新及业务增长&#xff0c;成为企业真正关心的问题。 基于大模型开发的又一个AI工具诞生&…

基于JSP的农产品供销服务系统

背景 互联网的迅猛扩张彻底革新了全球各类组织的运营模式。自20世纪90年代起&#xff0c;中国的政府机关和各类企业便开始探索利用网络系统来处理管理事务。然而&#xff0c;早期的网络覆盖范围有限、用户接受度不高、互联网相关法律法规不完善以及技术开发不够成熟等因素&…

企业动态|同创永益中标人保集团2023年混沌工程平台采购项目

2024年1月&#xff0c;经过严格的技术评审和商务洽谈&#xff0c;同创永益从众多厂商中脱颖而出&#xff0c;以综合评分第一名的佳绩一举拔得头筹&#xff0c;成功中标人保集团2023年混沌工程平台采购项目&#xff0c;本项目是同创永益混沌工程平台首次在保险公司内应用。人保集…

理解main方法的语法

由于JVM需要调用类的main()方法&#xff0c;所以该方法的访问权限必须是public&#xff0c;又因为JVM在执行main()方法时不必创建对象&#xff0c;所以该方法必须是static的&#xff0c;该方法接收一个String类型的数组参数&#xff0c;该数组中保存执行Java命令时传递给所运行…

工业互联网网关软件分析与设计

一、 案例软件分析 一、总体目标 工业互联网是新一代信息技术与制造业深度融合形成的新兴业态和应用模式&#xff0c;其发展前景广阔。工业互联网网关是将各采集监测点的数据通过无线或有线传感网络进行数据汇集&#xff0c;进行统一有效的监管。在工业互联网体系架构中&…

隐语SecretFlow实训营-第8讲:快速上手隐语SCQL的开发实践

SCQL使用/集成实践 目前SCQL只开放API供用户使用/集成 使用SCDBClient上手体验可以基于SCQL API开发封装白屏产品&#xff0c;或集成到业务链路中 使用流程&#xff1a; 部署系统 环境配置&#xff1a; 机器配置&#xff1a;CPU/MEM最低8C16G机构之间的网络互通 镜像&…

【面试HOT200】链表篇

系列综述&#xff1a; &#x1f49e;目的&#xff1a;本系列是个人整理为了秋招面试coding部分的&#xff0c;整理期间苛求每个算法题目&#xff0c;平衡可读性与代码性能&#xff08;leetcode运行复杂度均打败80%以上&#xff09;。 &#x1f970;来源&#xff1a;材料主要源于…

25+web技术站点,事半功倍,总有一个值得got

前言 收集一些有用的网站&#xff0c;为自己用&#xff0c;也分享一下&#xff0c;仅此而已。 ECMA 国际组织 各种文案 Ecma-262 - ECMAScript 规范Ecma-402&#xff0c; -国际化 API 规范Ecma-404 - JSON 数据交换语法ECMA-419 - 嵌入式系统 API 规范ECMA-414 规定了和 ECM…

数据挖掘|关联分析与Apriori算法详解

数据挖掘|关联分析与Apriori算法 1. 关联分析2. 关联规则相关概念2.1 项目2.2 事务2.3 项目集2.4 频繁项目集2.5 支持度2.6 置信度2.7 提升度2.8 强关联规则2.9 关联规则的分类 3. Apriori算法3.1 Apriori算法的Python实现3.2 基于mlxtend库的Apriori算法的Python实现 1. 关联分…

比较靠谱的测试进度报告

在测试的过程中&#xff0c;不要等领导过问&#xff0c;有一份比较靠谱的测试进度报告&#xff0c;让关心和支持项目的干系人心里有谱&#xff0c;有利于管理层对项目的监控和资源的支持&#xff0c;有利于项目团队成员之间沟通协调&#xff0c;及时发现问题利于项目风险控制等…

Docker 笔记

1.Ubuntu安装Docker 安装Docker看这篇文章 http://t.csdnimg.cn/IsSsJ 2.在docker中运行python代码 2.1搭建python环境 docker部署python环境看这篇文章 http://t.csdnimg.cn/TYz0G 2.2在python shell中运行python代码 2.2.1查看镜像 2.2.1启动python&#xff0c;厦门这个…

ABC318 F - Octopus

解题思路 对于每个宝藏维护个区间&#xff0c;答案一定在这些区间中对于每个区间的端点由小到大排序对于每个点进行判断&#xff0c;若当前位置合法&#xff0c;则该点一定为一个右端点则该点到前一个端点之间均为合法点若前一个点不合法&#xff0c;则一定是某一个区间限制的…

【Linux】详解动静态库的制作和使用动静态库在系统中的配置步骤

一、库的作用 1、提高开发效率&#xff0c;让开发者所有的函数实现不用从零开始。 2、隐藏源代码。 库其实就是所有的.o文件用特定的方式进行打包形成一个文件&#xff0c;各个.o文件包含了源代码中的机器语言指令。 二、动态库和静态库的制作和使用 2.1、静态库的制作和使用…

【学习笔记】java项目—苍穹外卖day03

文章目录 苍穹外卖-day03课程内容1. 公共字段自动填充1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3 步骤三 1.4 功能测试1.5 代码提交 2. 新增菜品2.1 需求分析与设计2.1.1 产品原型2.1.2 接口设计2.1.3 表设计 2.2 代码开发2.2.1 文件上传实现2.2.2 新…