一、爬取目标

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

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

打开今日头条 首页,在页面右侧会看到头条热榜,如下:

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

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

开发者模式分析:

二、爬取结果

爬取结果截图:

三、代码讲解

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

import requests
import pandas as pd
import re

定义一个请求头:(爬取目标较简单,一个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',
}

定义请求地址:

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

用requests发送请求:

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

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

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

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

title_list = []  # 热榜标题
value_list = [] # 热度值
url_list = [] # 热榜链接
category_list = [] # 热榜分类
label_list = [] # 热榜标签

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

for data in json_data['data']:
# 热榜标题
title = data['Title']
print('热榜标题:', title)
title_list.append(title)

其中,热榜链接比较特殊,接口中返回的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)

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

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

进一步保存到csv文件里:

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

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

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

四、技术总结

爬取技术流程:

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

五、演示视频

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

六、附完整源码

本案例完整源码已上传微信公众号"老男孩的平凡之路",后台回复"爬头条热榜"即可获取。 点击直达:点这里


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

【爬虫实战】用python爬今日头条热榜TOP50榜单!的更多相关文章

  1. Python爬虫学习笔记之爬今日头条的街拍图片

    代码: import requests import os from hashlib import md5 from urllib.parse import urlencode from multip ...

  2. Python爬虫实战二之爬取百度贴吧帖子

    大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 前言 亲爱的们,教程比较旧了,百度贴吧页面可能改版,可能代码不 ...

  3. Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  4. 转 Python爬虫实战二之爬取百度贴吧帖子

    静觅 » Python爬虫实战二之爬取百度贴吧帖子 大家好,上次我们实验了爬取了糗事百科的段子,那么这次我们来尝试一下爬取百度贴吧的帖子.与上一篇不同的是,这次我们需要用到文件的相关操作. 本篇目标 ...

  5. 转 Python爬虫实战一之爬取糗事百科段子

    静觅 » Python爬虫实战一之爬取糗事百科段子 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致 ...

  6. Python爬虫实战三之爬取嗅事百科段子

    一.前言 俗话说,上班时间是公司的,下班了时间才是自己的.搞点事情,写个爬虫程序,每天定期爬取点段子,看着自己爬的段子,也是一种乐趣. 二.Python爬取嗅事百科段子 1.确定爬取的目标网页 首先我 ...

  7. 8.Python爬虫实战一之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  8. Python爬虫实战一之爬取QQ音乐

    一.前言   前段时间尝试爬取了网易云音乐的歌曲,这次打算爬取QQ音乐的歌曲信息.网易云音乐歌曲列表是通过iframe展示的,可以借助Selenium获取到iframe的页面元素, 而QQ音乐采用的是 ...

  9. 一起学爬虫——使用xpath库爬取猫眼电影国内票房榜

    之前分享了一篇使用requests库爬取豆瓣电影250的文章,今天继续分享使用xpath爬取猫眼电影热播口碑榜 XPATH语法 XPATH(XML Path Language)是一门用于从XML文件中 ...

  10. Python爬虫实战教程:爬取网易新闻

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Amauri PS:如有需要Python学习资料的小伙伴可以加点击 ...

随机推荐

  1. 以最大速度将数据迁移至AWS S3存储

    数据上云,已经成为企业数据管理发展的必然趋势. 对于企业而言,数据上云"常态化"的趋势,无疑是一个巨大的技术红利.而数据规模爆发式增长的今天,移动和访问云端数据却成为困扰企业的一大 ...

  2. win10/11 暂停更新

    1. win+R 输入regeidt 进入注册表编辑器 2.在"计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Sett ...

  3. USACO 4.2

    目录 洛谷 2740 草地排水 代码(网络最大流) 洛谷 2751 工序安排 分析 代码 洛谷 1894 完美的牛栏 代码(二分图最大匹配) 草地排水洛谷传送门,草地排水USACO传送门 工序安排洛谷 ...

  4. 直播预告丨OpenHarmony标准系统多媒体子系统之音频解读

    今晚19点,OpenHarmony开源开发者成长计划知识赋能第五期"掌握OpenHarmony多媒体的框架原理"的第四节直播课,即将开播! 深开鸿资深技术专家苑春鸽老师,将在Ope ...

  5. C++ 中的可移植性和跨平台开发

    在当今软件开发行业中,跨平台开发已经成为了一种非常流行的方式.C++作为一门强大的编程语言,也被广泛应用于跨平台开发中.然而,由于不同操作系统的差异和限制,C++在不同的平台上的表现可能会有所不同.为 ...

  6. 一图读懂HUAWEI HiAI Foundation

    作为华为端侧AI的创新开放平台,HMS Core的HUAWEI HiAI Foundation开放AI算力,助力AI应用高效开发,同时联合多领域打造AI生态,实现日调用600亿次的突破,助力AI生态繁 ...

  7. default_statistics_target参数对PG和MogDB性能影响测试和分析

    default_statistics_target 参数对 PG 和 MogDB 性能影响测试和分析 本文出处:https://www.modb.pro/db/230160 前段时间在某客户生产环境优 ...

  8. 第十九篇:Django ORM外键关联关系

    一.一对多的创建 二.一对多跨表操作 三.创建多对多 四.Ajax处识 五.模板继承与导入 六.自定义分页

  9. 第二十一篇:信号、缓存、中间件、Form操作

    一.CSRF 二.中间件 三.缓存 四.信号 五.Form操作

  10. sql 语句系列(每个季度的开始日期和结束日期)[八百章之第二十二章]

    前言 基本上统计财务一定会用到. mysql select QUARTER(ADDDATE(y.dy,-1)) QTR, DATE_ADD(y.dy,INTERVAL -3 MONTH) Q_star ...