百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数

2023-11-09

背景

通过百度词条搜索,来查找300个关键词,在一年内发布新闻的条数。
在这里插入图片描述

最终效果实现如下:
在这里插入图片描述

实现思路

在这里插入图片描述
实现思路依然是:

  • 先根据多页的url,来找到规律,构建起一页的url;
def format_url(url, params: dict=None) -> str:
    query_str = urllib.parse.urlencode(params)
    return f'{ url }?{ query_str }'

def get_url(keyword):
    # https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=%E5%B9%B3%E5%AE%89%E9%93%B6%E8%A1%8C&medium=0&x_bfe_rqs=03E80&tngroupname=organic_news&newVideo=12&goods_entry_switch=1&rsv_dl=news_b_pn&pn=0
    params = {
        'tn': 'news',
        'rtt': 4,
        'bsst':1,
        'cl': 2,
        'wd': str(keyword),
        'medium': 0,
        'x_bfe_rqs': '03E80',
        'tngroupname':'organic_news',
        'newVideo': 12,
        'goods_entry_switch': 1,
        'rsv_dl':'news_b_pn'
    }
    url = "https://www.baidu.com/s"
    url = format_url(url, params)
    # print(url)
    return url
  • 对单页的url解析,拿到其时间,按时间做dict求数目。同时注意如何判断最末页的条件。因为这里的末页改变后,页面仍然能响应出内容,因此我的解决方法是每次获取单页的第一条url,如果下一页的url与这条一致,那就属于到最后一页了,退出。
def parse_page(keywords):
    res_data = {}
    for keyword in keywords:
        print(keyword)
        flag = 1
        page = 0
        url = get_url(keyword)
        first_page_flag = ''
        # 当flag=1时,表示还有页面
        time_lis = []
        while flag:
            url_page = url + f'&pn={page}'
            print(url_page)
            html = get_page(url_page)
            content = etree.HTML(html)
            # 取第一个链接
            res_href = content.xpath('//*[@id="1"]/div/h3/a/@href')
            if first_page_flag == res_href:
                print("无更多页面!~")
                flag = 0
            else:
                first_page_flag = res_href
                for i in range(1, 11):
                    title_xpath = f'//*[@id="{str(i)}"]/div/div/div/div/span[2]/text()'
                    res_title = content.xpath(title_xpath)
                    if len(res_title) != 0:
                        time_lis.append(res_title[0])
            page += 10
        # print(time_lis)
        res_data[keyword] = time_lis
    # print(res_data)
    print(res_data)
    return res_data
  • 先生成一年的date,然后拿date去取该日对应的资讯条数。结果如下:
def trans_date(s_date):
    # 传入单个字符串,统一
    date_list = re.split('[年月日]', s_date)[:-1]
    date_list_1 = ['0' + d if len(d) == 1 else d for d in date_list]
    date_format = '-'.join(date_list_1)
    return date_format
# 时间范围
def templete_date():
    # 输出list
    start='2020-12-31'
    end='2021-12-31'
    date_temp = []
    datestart=datetime.datetime.strptime(start,'%Y-%m-%d')
    dateend=datetime.datetime.strptime(end,'%Y-%m-%d')
    while datestart<dateend:
        datestart+=datetime.timedelta(days=1)
        date_temp.append(datestart.strftime('%Y-%m-%d'))
    return date_temp

在这里插入图片描述

代码

公众号:diting_dapeng

回复"百度资讯"获取源码,欢迎一起学习交流~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数 的相关文章

  • JS-style属性

    HTML元素 style 样式属性 值 document getElementById titles style color ff0000 document getElementById titles style fontSize 25px
  • HTML5上的LocalStorage(本地存储)基本用法

    获取localStorage的长度 window localStorage length 添加 编辑localStorage的内容 window localStorage setItem 键 值 根据对应的索引去获取对应localStora
  • Redhat5 安装序列号及版本说明

    为了保证安装的组件和订阅相匹配 红帽企业 Linux 5 需要输入一个安装号 它被用来配置安装程序来提供正确的软件包 安装号码包含在你的订阅里 如果您没有输入安装号码 只有核心服务器或 Desktop 将会被安装 其它功能可以在以后被手工安

随机推荐

  • Matlab Simulink 常用快捷操作和功能(1)

    1 快速查找library里面的模块 双击左键 然后输入要查询的模块名称 gt 2 block 和 signal 的命名修改 单击block 显示 修改名字 3 Simulink支持从块参数对话框中创建变量 可以在Simulink中创建MA
  • vue element admin 拖拽dialog v-el-drag-dialog

    1在vue element admin master里找到src directive el drag dialog文件夹复制到自己的相同目录下 2页面引用 import elDragDialog from directive el drag
  • 读者写者模型

    前一节介绍完了生产者消费者模型 它是一种一方生产数据 另一方消费数据的模式 下面介绍另外一种不同于生产消费的模型 即读者写者模型 两者相同 和前面的模型相比 读写模型中写者与写者之间还是互斥关系 写者与读者之间还是互斥与同步关系 两者差异
  • 数字信号处理第一次试验:系统响应及系统稳定性

    数字信号处理第一次试验 系统响应及系统稳定性 前言 一 实验目的 二 实验原理与方法 三 实验环境 四 实验内容及步骤 五 实验结果截图 含分析 六 思考题 七 实验报告要求 前言 为了帮助同学们完成痛苦的实验课程设计 本作者将其作出的实验
  • unity+高通vuforia开发增强现实(AR)教程(三) (勘误)

    按照原作者的想法 是可以实现手机观察到播放封面 但没法点击播放 针对这个问题 我翻看了官方论坛 因为最新的unity包缺少了一个C 文件 把缺少的文件加上 可以实现播放 以下为详细说明 The objective here is to sh
  • C++异常处理try和throw以及catch的使用

    异常捕获的基本构成方式 try c 异常的处理方式 包含可能抛出异常的语句 catch 类型名 形参名 捕获特定类型的异常 处理异常的语句 条件是抛出的异常类型是与catch参数类型匹配 try捕获异常并不能保证程序就不会崩溃 通常还需要做
  • python中关于requests里的timeout()

    timeout 超时 首先是 为防止服务器不能及时响应 大部分发至外部服务器的请求都应该带着 timeout 参数 在默认情况下 除非显式指定了 timeout 值 requests 是不会自动进行超时处理的 如果没有 timeout 你的
  • Oracle identified by values

    有时候需要使用user的密码 却不知道user密码是什么 我常常使用如下把戏 1 记录密码hash值 2 更改为自己的密码 3 使用完后 利用identified by values 更改回原来的密码 在oracle 10g的时候 密码是h
  • opencv图像灰度重心算法

    原文 http blog csdn net moses1213 article details 44679603 导师交给的项目 其中一步就是求光斑的重心 网上有很多关于重心的代码 大体是利用cvFindContour函数找出图像的轮廓 然
  • 开源项目 xijia-plus 启动教程 (通用后管理系统)

    一 说明 xijia plus 是什么 xijia plus 是一个 通用后管理系统 脚手架 采用 springboot vue 进行开发 可以在该脚手架进行业务的快速开发 xijia plus 可以做什么 如果你想快速开发一个项目 可以用
  • Graphpad Prism9.5.1 安装教程 (含Win/Mac版)

    GraphPad Prism GraphPad Prism是一款非常专业强大的科研医学生物数据处理绘图软件 它可以将科学图形 综合曲线拟合 非线性回归 可理解的统计数据 数据组织结合在一起 除了最基本的数据统计分析外 还能自动生成统计图 安
  • 【程序员必须要掌握哪些算法】

    一个程序员一生中可能会邂逅各种各样的算法 但总有那么几种 是作为一个程序员一定会遇见且大概率需要掌握的算法 今天就来聊聊这些十分重要的 必抓 算法吧 你可以从以下几个方面进行创作 仅供参考 一 引言 算法作为程序员的核心技能之一 在软件开发
  • 安卓面试之轻松战胜内存优化问题

    熟悉如何内存优化 无疑是安卓工程师进阶的一个必要条件 同时也是面试的重点和难点 面试常见问题 1 如何优化内存 2 如何加载10M大小的图片 3 如何线上监控内存 为什么要优化内存 移动设备中 内存是非常重要的资源 如果内存使用不当 轻则出
  • 利用短时傅里叶变换(STFT)对信号进行时频谱分析和去噪声

    利用短时傅里叶变换 STFT 对信号进行时频谱分析和去噪声 1 背景 傅里叶变换 TF 对频谱的描绘是 全局性 的 不能反映时间维度局部区域上的特征 人们虽然从傅立叶变换能清楚地看到一整段信号包含的每一个频率的分量值 但很难看出对应于频率域
  • 基于Spring Gateway路由判断器实现各种灰度发布场景

    文章目录 1 灰度发布实现 1 1 按随机用户的流量百分比实现灰度 1 2 按人群划分实现的灰度 1 2 1 通过Header信息实现灰度 1 2 2 通过Query信息实现灰度 1 2 3 通过RemoteAdd判断来源IP实现灰度 2
  • django中models field详解

    本文参考自 django官方文档models field 在model中添加字段的格式一般为 field name field type field options 一 field options 所有字段共用 1 null 默认为Fals
  • 滤波器拓扑结构:Sallen-key和Multiple Feedback

    在一些关于滤波器设计的地方 总可以看到Sallen key和Multiple Feedback这两个词组 但不清楚什么意思 查了查资料 顺带在此处记录一下 Sallen key 麻省理工学院林肯实验室的R P Sallen and E L
  • Android Studio第一次安装虚拟机时报错Emulator:ERROR: Unknown AVD name[ ], use -list-avds to see valid list.

    安装完虚拟机后点击启动报错 虚拟化已开启 解决办法 1 修改环境变量ANDROID SDK HOME路径指到platforms路径下 例如 D androidSDK platforms 2 重启Android Studio 3 重新安装虚拟
  • 学习笔记:CentOS7安装Docker

    一 检查CentOS 系统的内核版本 Docker 要求 CentOS 系统的内核版本高于 3 10 通过 uname r 命令查看当前的内核版本 二 检查并清除系统残余项 并安装Docker依赖环境 1 卸载Docker 可选 如果之前安
  • 百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数

    背景 通过百度词条搜索 来查找300个关键词 在一年内发布新闻的条数 最终效果实现如下 实现思路 实现思路依然是 先根据多页的url 来找到规律 构建起一页的url def format url url params dict None g