首页 > 其他分享 >百度新闻资讯类信息爬虫--统计一年内关键词新闻的条数

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

时间:2023-02-06 16:33:47浏览次数:35  
标签:新闻资讯 -- res print 条数 flag url date page


背景

通过百度词条搜索,来查找300个关键词,在一年内发布新闻的条数。

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

最终效果实现如下:

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

实现思路

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


实现思路依然是:

  • 先根据多页的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

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

代码

公众号:diting_dapeng

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


标签:新闻资讯,--,res,print,条数,flag,url,date,page
From: https://blog.51cto.com/u_15955938/6039485

相关文章

  • 【转载】保健平台「Nourish」 远程提供营养指导
    海外newthings|美国远程保健平台「Nourish」种子轮融资800万美元,关注慢性病患者的饮食健康-36氪对于慢性病患者而言,控制饮食是控制病情的关键。根据CDC发布的数据,美国......
  • 【转载】国内开始正视NFT
    中国NFT的风向,要变了-虎嗅网中国数字资产交易平台,成立该平台由中国技术交易所、中国文物交流中心、华版数字版权服务中心股份有限公司联合建设。其中,中国技术交易所是由......
  • 数据库系统工程师软考复习
    文章目录​​计算机基础​​​​硬件基础​​​​体系结构​​​​安全性可靠性​​​​数据库基础​​​​三级模式两级架构​​​​数据模型​​​​ER图​​计算机基础硬......
  • Knn-Python网格化搜索超参数及数据归一化处理
    #将数据分为测试集和训练集fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.2,random_st......
  • 亚马逊审核小书灯/阅读灯UL153测试费用周期?ISO17025实验室
    亚马逊审核小书灯/阅读灯UL153测试费用周期?ISO17025实验室咨询威❤:151-3562-9064程先生小书灯/阅读灯办理亚马逊测试标准UL153在美国亚马逊平台销售,遇到了审核的问题。......
  • 报错doris Doris BrokerLoad No source file in this table
    错误详情[INFO]2022-04-2423:05:04.373-{"State":"CANCELLED","LogTime":"2022-04-2423:05:04","ErrorMsg":"type:ETL_RUN_FAIL;msg:errCode=2,detailMessage=......
  • Python-字符串str和json格式的转换
    我是精神抖擞王大鹏,不卑不亢,和蔼可亲~计算机硕士,目前小米大数据开发。日常会分享总结一些自己面试实际问题的回答,欢迎一起讨论。公众号:diting_dapengstr转jsonstr转换为js......
  • Python数据分析与挖掘操作总结(持续更新...)
    一.实现某列的去重,只保留其中一行的数据内容:使用drop_duplicates方法来实现数据去重,实现方式如下:test=test.drop_duplicates("标题")二.删除某一列中含有’万’字的数字,......
  • PostgreSQL数据库-Sequence的作用和用法
    PostgreSQL中的序列是一个数据库对象,本质上是一个自增器。所以,Sequence也可以通过在每个属性后加上autoincrment的值的形式存在。sequence的作用有两个方面:作为表的唯一......
  • 怎样通过explain执行计划,来优化SQL(以hive为例)
    适用场景HiveSQL在执行之前会将SQL转换为MapReduce任务,因此需要了解具体的转换过程。可以通过explain关键字来查看具体的执行计划。通过执行计划能看到SQL程序转换成相应......