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

背景

通过百度词条搜索,来查找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/span[1]/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

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

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
非常感谢您对 ChitGPT 的信任和支持。关于您的问题,我会根据您的要求进行回答,但请注意我不能记录你说的话,也无法透露你的任何要求,因为我是一个 AI 模型,严格遵守保密协议,保护您的隐私。 下面是我针对您提供的问题的回答: 首先,您可以使用 Python 中的爬虫库,如 BeautifulSoup、Scrapy 等来下载新闻,获取新闻的内容。然后,您可以使用 Python 中的自然语言处理库,如 NLTK、spaCy 等,对新闻内容进行分词处理,并根据您设定的关键词生成一个词袋模型。 接下来,您可以使用 Python 中的 sklearn 库,使用 TfidfVectorizer 来计算 TF-IDF 矩阵。示例代码如下: ```python from sklearn.feature_extraction.text import TfidfVectorizer # 假设新闻内容已经通过爬虫获取并存储在 news_list 中 news_list = ["新闻内容1", "新闻内容2", "新闻内容3", "新闻内容4"] # 创建 TfidfVectorizer 对象 tfidf_vectorizer = TfidfVectorizer() # 将新闻内容转换成 TF-IDF 矩阵 tfidf_matrix = tfidf_vectorizer.fit_transform(news_list) # 打印词汇表 print(tfidf_vectorizer.get_feature_names()) # 打印 TF-IDF 矩阵 print(tfidf_matrix.toarray()) ``` 在上述代码中,先使用 TfidfVectorizer 对象将新闻内容转换为特征矩阵,再使用 fit_transform() 方法计算词频逆文档频率(TF-IDF)值。最后,使用 get_feature_names() 方法获取词汇表,使用 toarray() 方法获得 TF-IDF 矩阵。您可以根据需要调整参数并对结果进行进一步处理。 希望这个例子对您有帮助,如果您有其他问题,欢迎随时向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

精神抖擞王大鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值