【爬虫案例】用Python爬取抖音热榜数据!
一、爬取目标
您好,我是@马哥python说,一名10年程序猿。
本次爬取的目标是:抖音热榜
共爬取到50条数据,对应TOP50热榜。含5个字段,分别是:
热榜排名,热榜标题,热榜时间,热度值,热榜标签。
用Chrome浏览器,右键打开开发者模式,选择:网络->XHR这个选项,重新刷新一下页面。
操作过程,如下图所示:
成功找到了50条热榜数据。
下面,开始编码爬虫代码。
二、编写爬虫代码
首先,导入需要用到的库:
import requests
import pandas as pd
import time
定义一个请求地址,即上图中的目标链接地址:
# 接口地址
url = 'https://www.douyin.com/aweme/v1/web/hot/search/list/?device_platform=webapp&aid=6383&channel=channel_pc_web&detail_list=1&source=6&pc_client_type=1&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1440&screen_height=900&browser_language=en-US&browser_platform=MacIntel&browser_name=Chrome&browser_version=114.0.0.0&browser_online=true&engine_name=Blink&engine_version=114.0.0.0&os_name=Mac+OS&os_version=10.15.7&cpu_core_num=4&device_memory=8&platform=PC&downlink=1.5&effective_type=3g&round_trip_time=600&webid=7246602757481154103&msToken=A-dVF1R3L6t6yeYNVsnPA7YMBkohetjMSING0Q3C3UGXBq7B_lhuJVv6N1hF8Yum9qxQMMVa_GiSsER1Yf595bF5Q_O3-JY1hQ8s-ZPB21PCVYL5C7PEjQiPAMGtGg==&X-Bogus=DFSzswVOXn0ANcrmtjl2YN7TlqSE'
定义一个请求头,从开发者模式中的Headers->Request Headers中复制下来:
# 构造请求头
h1 = {
'Cookie': '换成自己的cookie值',
'Accept': 'application/json, text/plain, */*',
'Accept-Encoding': 'gzip, deflate, br',
'Host': 'www.douyin.com',
'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',
'Accept-Language': 'zh-CN,zh-Hans;q=0.9',
'Referer': 'https://www.douyin.com/hot',
'Connection': 'keep-alive'
}
不知如何获取Cookie?参考下图:
向目标地址发送请求(带上请求头),并用json格式接收返回数据:
# 发送请求
r = requests.get(url, headers=h1)
# 用json接收请求数据
json_data = r.json()
定义一些空列表,用于存储数据:
position_list = [] # 热榜排名
title_list = [] # 热榜标题
time_list = [] # 热榜时间
hot_value_list = [] # 热度值
label_list = [] # 热榜标签
以“热榜标题”为例,解析数据:
for data in data_list:
# 热榜标题
title = data['word']
print('热榜标题:', position, title)
title_list.append(title)
其他字段同理,不再赘述。
最后,把解析到的数据,存储到Dataframe中,并保存到csv文件里:
# 拼装爬取到的数据为DataFrame
df = pd.DataFrame(
{
'热榜排名': position_list,
'热榜标题': title_list,
'热榜时间': time_list,
'热度值': hot_value_list,
'热榜标签': label_list,
}
)
# 保存结果到csv文件
df.to_csv('抖音热榜.csv', index=False, encoding='utf_8_sig')
这里需要注意的是,to_csv要加上encoding='utf_8_sig'参数,防止保存到csv文件产生乱码数据。
查看部分爬取结果:
共51条数据(含1条置顶热搜),对应热榜TOP50排名。
每条数据含5个字段:热榜排名,热榜标题,热榜时间,热度值,热榜标签。。
三、同步讲解视频
3.1 代码演示视频
代码演示: 【Python爬虫演示】用Python爬抖音热榜数据
四、获取完整源码
get完整源码:【爬虫案例】用Python爬取抖音热榜数据!
我是@马哥python说 ,持续分享python源码干货中!
【爬虫案例】用Python爬取抖音热榜数据!的更多相关文章
- python爬取抖音APP视频教程
本文讲述爬取抖音APP视频数据(本文未完,后面还有很多地方优化总结) 公众号回复:抖音 即可获取源码 1.APP抓包教程,需要用到fiddler fiddler配置和使用查看>>王者荣耀盒 ...
- 教你用python爬取抖音app视频
记录一下如何用python爬取app数据,本文以爬取抖音视频app为例. 编程工具:pycharm app抓包工具:mitmproxy app自动化工具:appium 运行环境:windows10 思 ...
- 一篇文章教会你用Python抓取抖音app热点数据
今天给大家分享一篇简单的安卓app数据分析及抓取方法.以抖音为例,我们想要抓取抖音的热点榜数据. 要知道,这个数据是没有网页版的,只能从手机端下手. 首先我们要安装charles抓包APP数据,它是一 ...
- Python爬取抖音视频
最近在研究Python爬虫,顺便爬了一下抖音上的视频,找到了哥们喜欢的小姐姐居多,咱们给他爬下来吧. 最终爬取结果 好了废话补多说了,上代码! #https://www.iesdouyin.com/a ...
- from appium import webdriver 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium) - 北平吴彦祖 - 博客园 https://www.cnblogs.com/stevenshushu/p ...
- 使用python爬虫,批量爬取抖音app视频(requests+Fiddler+appium)
抖音很火,楼主使用python随机爬取抖音视频,并且无水印下载,人家都说天下没有爬不到的数据,so,楼主决定试试水,纯属技术爱好,分享给大家.. 1.楼主首先使用Fiddler4来抓取手机抖音app这 ...
- Python爬虫---爬取抖音短视频
目录 前言 抖音爬虫制作 选定网页 分析网页 提取id构造网址 拼接数据包链接 获取视频地址 下载视频 全部代码 实现结果 待解决的问题 前言 最近一直想要写一个抖音爬虫来批量下载抖音的短视频,但是经 ...
- python网络爬虫第三弹(<爬取get请求的页面数据>)
一.urllib库 urllib是python自带的一个用于爬虫的库,其主要作用就是通过代码模拟浏览器发送请求,其常被用到的子模块在 python3中的为urllib.request 和 urllib ...
- 爬虫系列(1)-----python爬取猫眼电影top100榜
对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天在整理代码时,整理了一下之前自己学习爬虫的一些代码,今天先上一个简单的例子,手把手教你入门Python爬虫,爬取 ...
- 吴裕雄--天生自然PYTHON爬虫:使用Selenium爬取大型电商网站数据
用python爬取动态网页时,普通的requests,urllib2无法实现.例如有些网站点击下一页时,会加载新的内容,但是网页的URL却没有改变(没有传入页码相关的参数),requests.urll ...
随机推荐
- Spark技术生态
Spark的技术生态 Spark的技术生态包含了各种丰富的组件,而不同的组件提供了不同功能,以适应不同场景. Spark core spark core包含Spark的基本功能,定义了RDD的API以 ...
- SSE与AVX指令基础介绍与使用
SSE与AVX指令基础介绍与使用 SSE/AVX指令属于Intrinsics函数,由编译器在编译时直接在调用处插入代码,避免了函数调用的额外开销.但又与inline函数不同,Intrinsics函数的 ...
- Access文件清理占用内存
1.用access打开access.accdb文件 2.找到数据库工具的压缩和修复数据库,单击就行 3.数据库文件成功便成500K内存占用
- #第一类斯特林数,NTT#CF960G Bandit Blues
题目 给你三个正整数 \(n\),\(a\),\(b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数, 定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满 ...
- Qt线程简单使用一:QThread~创建线程类子类
需求: 点击QPushButton按钮,QLabel中的数字,不断累加,一直到999. 做法: 点击QPushButton后,启动线程,线程while循环,不断发送累加的数字回主线程,修改QL ...
- Servlet和springMVC
什么是Servlet? Servlet是使用Java语言编写的运行在服务器端的程序.狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一 ...
- 模拟SQLserver死锁现象
SQL Server死锁是指两个或多个事务相互等待对方持有的资源而无法继续执行的情况.当两个或多个事务都持有一些资源并且试图获取其他事务持有的资源时,可能会发生死锁.这种情况下,每个事务都在等待另一个 ...
- 如何在openGauss 2.1.0中使用Job
如何在 openGauss 2.1.0 中使用 Job 如何在 openGauss 2.1.0 中使用 Job Job 类似 unix 中的 crontab,有定时执行的功能,可以在指定的时间点或每天 ...
- docker 应用篇————mysql容器[十二]
前言 简单介绍一下mysql容器. 正文 这里简单介绍一下mysql的容器. hub.docker.io给了我们一个启动的示例. docker run --name some-mysql -e MYS ...
- redis 面试题整理
前言 前天面试了一家公司,平时看一本redis书的也使用redis,对里面的东西也基本了解,结果回答的时候居然回答了只是使用了(因为认为是redis是运维的东西,做的东西多,所以忘了,好吧这是借口), ...