码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【爬虫实战】用python爬今日头条热榜TOP50榜单!


    文章目录

    • 一、爬取目标
    • 二、爬取结果
    • 三、代码讲解
    • 四、技术总结
    • 五、演示视频
    • 六、附完整源码

    一、爬取目标

    您好!我是@马哥python说,一名10年程序猿。

    今天分享一期爬虫案例,爬取的目标是:今日头条热榜的榜单数据。

    爬取以上6个关键字段,含:

    热榜排名,热榜标题,热度值,热榜标签,热榜分类,热榜链接。

    打开今日头条首页,在页面右侧会看到头条热榜,并进行开发者模式分析:
    开发者分析

    二、爬取结果

    爬取结果截图:
    部分数据

    三、代码讲解

    首先,导入需要用到的库:

    import requests
    import pandas as pd
    import re
    
    • 1
    • 2
    • 3

    定义一个请求头:(爬取目标较简单,一个User-agent即可)

    # 请求头
    h1 = {
    	'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15',
    }
    
    • 1
    • 2
    • 3
    • 4

    定义请求地址:

    url = 'https://www.toutiao.com/hot-event/hot-board/?origin=toutiao_pc'
    
    • 1

    用requests发送请求:

    # 发送请求
    response = requests.get(url, headers=h1)
    
    • 1
    • 2

    查看响应码并以json方式接收返回数据:

    # 查看响应码
    print(r.status_code)
    # 接收返回数据
    json_data = r.json()
    
    • 1
    • 2
    • 3
    • 4

    定义一些空列表,用于存放数据:

    title_list = []  # 热榜标题
    value_list = []  # 热度值
    url_list = []  # 热榜链接
    category_list = []  # 热榜分类
    label_list = []  # 热榜标签
    
    • 1
    • 2
    • 3
    • 4
    • 5

    以"热榜标题"字段为例:

    for data in json_data['data']:
    	# 热榜标题
    	title = data['Title']
    	print('热榜标题:', title)
    	title_list.append(title)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    其中,热榜链接比较特殊,接口中返回的url很长,形如:
    某个热榜链接

    可以看到,url中从?往后,都是不必要的请求参数。

    所以,用正则表达式把?后面的全部删掉,提取出id,再进行拼接url,如下:

    # 正则表达式提取出链接id
    url3 = re.search(r"(?<=https:\/\/www\.toutiao\.com\/trending\/)\d+", url2).group(0)
    # 拼接链接
    url4 = 'https://www.toutiao.com/trending/' + str(url3)
    
    • 1
    • 2
    • 3
    • 4

    最后,把所有字段存放的列表数据组成Dataframe格式:

    # 把列表数据组装成Dataframe数据
    df = pd.DataFrame(
    	{
    		'热榜排名': range(1, data_num + 1),  # 一共50条
    		'热榜标题': title_list,
    		'热度值': value_list,
    		'热榜标签': label_list,
    		'热榜分类': category_list,
    		'热榜链接': url_list,
    	}
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    进一步保存到csv文件里:

    # 保存到csv文件
    df.to_csv(result_file, header=True, index=False, encoding='utf_8_sig')
    
    • 1
    • 2

    以上,核心逻辑讲解完毕。

    代码中还含有:解析热度值、热榜标签、热榜分类、热榜链接字段等,详见文末完整代码。

    四、技术总结

    爬取技术流程:

    1. requests 发送请求
    2. json 解析数据
    3. re 正则表达式提取文本
    4. pandas 保存csv

    五、演示视频

    演示视频:
    代码演示:用python爬头条热榜TOP50榜单!

    六、附完整源码

    附完整源码:【爬虫实战】用python爬今日头条热榜TOP50榜单!


    我是@马哥python说,一名10年程序猿,持续分享python干货中!

  • 相关阅读:
    JS Map与weakMap
    C++ 正则表达式(匹配、搜索、替换)
    阿里云通过音视频url获取字幕内容
    【CDH】超详细-搭建本地大数据研发环境(16G内存+CDH)
    Day17-购物车页面-商品列表-实现滑动删除功能
    android13 RK356X 预装第三方apk失败
    【408数据结构与算法】—排序(十四)
    拉格朗日乘子法
    Flink 数据目录体系:深入理解 Catalog、Database 及 Table 概念
    Springboot和Vue+MYSQL项目(基本介绍+前后端结合初步项目)+maven+mybatis
  • 原文地址:https://blog.csdn.net/solo_msk/article/details/133125564
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号