爬虫 新闻网站 并存储到CSV文件 以红网为例 V1.0

爬虫:红网网站, 获取当月指定关键词新闻,并存储到CSV文件 V1.0

目标网站:红网

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

环境: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,文章更新的本月的不多。

运行结果如下:

  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cisco交换机安全配置

Cisco交换机安全配置 前提 我们以下命令一般都要先进入Config模式 S1> enable S1# conf t S1(config)#端口安全保护 禁用未使用的端口 以关闭fa0/1到fa0/24的端口为例 S1(config)# interface range fa0/1-24 S1(config-if-range)# shutdown缓解MAC地址表攻击 防止CAM…

关联规则(理论及实例)

目录 一、啤酒和尿布的故事 二、理论 三、实例 1. 自定义数据集 2. 数据需转换成one-hot编码 3.电影题材关联分析 一、啤酒和尿布的故事 在美国&#xff0c;一些年轻的父亲下班后经常要到超市去购买婴儿尿布&#xff0c;超市因此发现一个规律&#xff0c;在购买婴儿尿布的…

微信小程序上传到gitee

共三步 1、新建gitee仓库 点号&#xff0c;新建仓库&#xff0c;填入仓库信息新建即可 2、修改版本管理参数 微信开发者工具中点开版本管理&#xff0c;未初始化&#xff0c;需要先点初始化 接下来将设置中的通用、网络认证、远程3个部分的参数填写好 通用&#xff1a;核对…

idea的后端环境配置

首先&#xff0c;在你刚打开idea时红色箭头所指的是你进行配置的地方&#xff0c;接下来我把具体步骤说一下 1&#xff0c;直接点击箭头所指的地方就会出现如图界面&#xff0c;然后点击Tomcat server,使其展开点击第一个 第二步取消勾选&#xff0c;第三步选择bin的上一级然后…

51单片机入门_江协科技_21~22_OB记录的笔记

21. LED点阵屏 21.1. LED点阵屏介绍 •LED点阵屏由若干个独立的LED组成&#xff0c;LED以矩阵的形式排列&#xff0c;以灯珠亮灭来显示文字、图片、视频等。LED点阵屏广泛应用于各种公共场合&#xff0c;如汽车报站器、广告屏以及公告牌等 •LED点阵屏分类 按颜色&#xff1a;单…

基于SpringBoot+Vue实现前后端分离的房屋租赁系统

一、&#x1f680;选题背景介绍 &#x1f4da;推荐理由&#xff1a; 计进行房屋租赁工作的管理&#xff0c;不仅能够保证各项信息准确无误、快速输出&#xff0c;同时计算机具有手工管理所无法比拟的优点&#xff0c;例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿…

2024整理一些前端面试题库一

以下是一些2024年前端面试题及其答案&#xff1a; HTML、XML、XHTML之间的区别是什么&#xff1f; HTML是一种标记语言&#xff0c;用于创建网页&#xff0c;定义页面的结构和内容&#xff0c;如标题、段落、表格、链接、图片等。 XML&#xff08;可扩展标记语言&#xff09;…

screen服务器后台使用

screen服务器后台使用 想用远程服务器跑程序&#xff0c;想让自己的电脑关机后继续运行&#xff0c;可以使用screen 1.查看已有screen screen -ls2.删除screen screen -X -S 2758463 quit3.新建screen screen -S elsevier查看&#xff0c;显示创建成功&#xff1a; 4.切…

免费的 AIGC工具( 7个 )

人工智能技术有好的一方面&#xff0c;又不好的地方&#xff0c;要区别对待&#xff0c;吸取精华&#xff0c;去其糟粕。目前市场上有很多AI大模型&#xff0c;可以支持聊天&#xff0c;写文稿&#xff0c;创作等&#xff0c;部分可以生成图片&#xff0c;以下是7个很不错的免费…

2024/4/5 AT24C02 总线(I²C总线)

存储器的介绍&#xff1a; 一、易失性存储器RAM&#xff1a;存储速度快&#xff0c;掉电丢失 SRAM&#xff08;静态RAM&#xff09;&#xff1a;极快DRAM&#xff08;动态RAM&#xff09;&#xff1a;需要配一个扫描电路&#xff0c;进行“补电”&#xff08;动态刷新&#x…

02 _ 分布式系统的指标:啥是分布式的三围

你好&#xff0c;我是聂鹏程。 在上一篇文章中&#xff0c;通过对分布式发展历程的学习&#xff0c;我们对分布式技术有了一个整体印象。接下来&#xff0c;我们就再来看看可以用哪些指标去具体地衡量一个分布式系统。如果你已经对分布式系统的指标了解得很清楚了&#xff0c;…

刷题之Leetcode34题(超级详细)

34. 在排序数组中查找元素的第一个和最后一个位置 力扣链接(opens new window)https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/ 给定一个按照升序排列的整数数组 nums&#xff0c;和一个目标值 target。找出给定目标值在数组中的开始…

Jenkins 安装部署

1、安装下载 官网地址&#xff1a;Jenkins 下载 war 包 1、前置环境 JDK 环境&#xff08;根据 Jenkins 版本不同&#xff0c;需要的 JDK 版本不同&#xff0c;目前需要 JDK11 的版本来支持&#xff09;Maven maven 官网下载压缩包 &#xff0c;并将其传输到服务器&#xf…

【Python】免费的图片/图标网站

专栏文章索引&#xff1a;Python 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 这里是我收集的几个免费的图片/图标网站&#xff1a; iconfont-阿里巴巴矢量图标库icon&#xff08;.ico&#xff09;INCONFINDER&#xff08;.ico&#xff09;

clickhouse MPPDB数据库--新特性使用示例

clickhouse 新特性&#xff1a; 从clickhouse 22.3至最新的版本24.3.2.23&#xff0c;clickhouse在快速发展中&#xff0c;每个版本都增加了一些新的特性&#xff0c;在数据写入、查询方面都有性能加速。 本文根据clickhouse blog中的clickhouse release blog中&#xff0c;学…

【C++入门】关键字、命名空间以及输入输出

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授&#xff0c;主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真&#xff0c;具有丰富的实战应用经验&#xff0c;主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…

6:算法基础--6.1:线性结构 ,6.2:查找算法

转上一节&#xff1a; http://t.csdnimg.cn/ql5Cdhttp://t.csdnimg.cn/ql5Cd 课程内容提要&#xff1a; 6&#xff1a;知识点考点详解 6.1&#xff1a;线性结构 通常分析时间复杂度的方法是从算法中选取-种对于所研究的问题来说是基本运算的操作&#xff0c;以 该操作重…

51单片机入门:认识开发板

认识开发板 板载资源&#xff1a; 数码管模块 说明&#xff1a; 2个四位一体共阴数码管 详细&#xff1a; 2个四位一体&#xff1a;两个独立的四位数码管&#xff0c;每个四位数码管都是“一体”的设计&#xff0c;也就是说&#xff0c;每个数码管内部集成了四个独立的七段LE…

【Linux】Ubuntu 磁盘管理

准备一个U盘或者SD卡&#xff08;含读卡器&#xff09;&#xff0c;并将其格式化成 FAT32 格式&#xff0c;不要使用NTFS格式&#xff08;这是微软的专利&#xff0c;大部分Linux系统不支持&#xff09;和exFAT格式&#xff08;有的Linux系统也不支持&#xff09;。 如果Ubun…