- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章python批量爬取下载抖音视频由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例为大家分享了python批量爬取下载抖音视频的具体代码,供大家参考,具体内容如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
import
os
import
requests
import
re
import
sys
import
asyncio
import
aiohttp
headers
=
{
'user-agent'
:
'mozilla/5.0 (iphone; cpu iphone os 11_0 like mac os x) applewebkit/604.1.38 (khtml, like gecko) '
'version/11.0 mobile/15a372 safari/604.1'
}
video_urls, page
=
[],
1
def
get_info(url):
"""
:param url: 用户的链接
:return:返回name,dytk,user_id 参数
"""
name
=
none
dytk
=
none
user_id
=
none
try
:
response
=
requests.get(url, headers
=
headers)
user_id
=
response.url.split(
'/'
)[
5
].split(
'?'
)[
0
]
name
=
re.search(r
'class="nickname">(.*?)<'
, response.text)[
1
]
dytk
=
re.search(r
"dytk: '(.*?)'"
, response.text)[
1
]
except
(typeerror, indexerror):
sys.stdout.write(
'waring:输入的链接错误'
)
except
requests.exceptions:
sys.stdout.write(
'waring:链接错误'
)
finally
:
return
name, user_id, dytk
def
make_dir(name):
"""
建立文件夹
:param name: 用户名称
:return:
"""
if
not
os.path.isdir(name):
os.mkdir(name)
else
:
pass
def
get_all_video(user_id, max_cursor, dytk):
"""
获取视频的地址
:param user_id:
:param max_cursor:
:param dytk:
:return:
"""
url
=
"https://www.amemv.com/aweme/v1/aweme/post/?"
params
=
{
'user_id'
: user_id,
'count'
:
21
,
'max_cursor'
: max_cursor,
'dytk'
: dytk}
try
:
response
=
requests.get(url
=
url, params
=
params, headers
=
headers)
if
response.status_code
=
=
200
:
datas
=
response.json()
for
data
in
datas[
'aweme_list'
]:
name
=
data.get(
'share_info'
).get(
'share_desc'
)
url
=
data.get(
'video'
).get(
'play_addr'
).get(
'url_list'
)[
0
].replace(
'playwm'
,
'play'
)
video_urls.append([name, url])
if
datas[
'has_more'
]
=
=
1
and
datas.get(
'max_cursor'
) !
=
0
:
global
page
print
(f
'收集第{page}页视频'
)
page
+
=
1
return
get_all_video(user_id, datas.get(
'max_cursor'
), dytk)
else
:
print
(
'收集完成'
)
return
video_urls
else
:
print
(
'状态码:'
, response.status_code)
return
none
except
exception as e:
print
(
'waring:'
, e)
return
async
def
download_video(index, name, video_name, url):
"""
下载视频
:param index: 视频id
:param name: 用户名称
:param video_name: 视频名称
:param url: 下载url
:return:
"""
print
(f
'正在下载第{index}个视频:{video_name}'
)
video_path
=
'{}/{}.mp4'
.
format
(name, video_name)
if
not
os.path.isfile(video_path):
try
:
async with aiohttp.clientsession() as session:
async with session.get(url
=
url, headers
=
headers, ssl
=
false) as response:
with
open
(video_path,
'wb'
) as f:
while
true:
chunk
=
await response.content.read(
1024
)
f.write(chunk)
if
not
chunk:
break
print
(f
'下载完成第{index}个视频:{video_name}'
)
except
exception as e:
print
(
'waring:download faild'
, video_name, e)
return
else
:
print
(
'文件已存在'
)
def
main():
url
=
'http://v.douyin.com/deorkn/'
name, user_id, dytk
=
get_info(url)
if
not
(name, user_id, dytk):
return
make_dir(name)
get_all_video(user_id,
0
, dytk)
print
(f
'{name}:总共有{len(video_urls)}个视频'
)
tasks
=
[]
for
index, item
in
enumerate
(video_urls,
1
):
video_name
=
item[
0
]
url
=
item[
1
]
tasks.append(asyncio.ensure_future(download_video(index, name, video_name, url)))
loop
=
asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))
loop.run_until_complete(asyncio.sleep(
0
))
loop.close()
print
(f
'{name}视频下载完成!'
)
if
__name__
=
=
'__main__'
:
main()
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.
原文链接:https://blog.csdn.net/qq_43513350/article/details/85692569 。
最后此篇关于python批量爬取下载抖音视频的文章就讲到这里了,如果你想了解更多关于python批量爬取下载抖音视频的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在字符串中有一个大词。例子白 Wine 额外优惠。 我想在第一行使用“White”,在第二行使用“wine extra offer”。使用下面的代码: string value="White win
我想在无符号中执行一些算术运算,需要取负整数的绝对值,比如 do_some_arithmetic_in_unsigned_mode(int some_signed_value) { unsign
我正在努力使用 data.table 来总结向量函数的结果,这在 ddply 中很容易。 问题 1:使用带有矢量输出的(昂贵的)函数聚合 dt dt[ , as.list(quantile(x)),
我有两个分数列表; 说 A = [ 1/212, 5/212, 3/212, ... ] 和 B = [ 4/143, 7/143, 2/143, ... ] . 如果我们定义 A' = a[0] *
我已经使用 numpy 从 csv 文件中获取数据。 numpy 数组的尺寸为:100*20。我如何取列的平均值(比如 col 3,5,8)并用包含这 3 个 cols 平均值的新列替换它们 如果
在 Rust 中取任意数的 n 次根的最佳方法是什么?例如,num crate 只允许取整数类型的第 n 个主根,即 floor'ed 或 ceil'ed 值......如何最好地接近实际值? 最佳答
看起来这应该很容易,但我很困惑。我已经掌握了使用 dplyr 进行编程的大致技巧0.7,但为此苦苦挣扎:How do Iprogram in dplyr我想要编程的变量是否是一个字符串? 我正在抓取数
在 Rust 中取任意数的 n 次根的最佳方法是什么?例如,num crate 只允许取整数类型的第 n 个主根,即 floor'ed 或 ceil'ed 值......如何最好地接近实际值? 最佳答
我有一个 pandas 数据框,其中有一列名为“coverage”。对于一系列特定索引值,我想获取前 100 行的平均“覆盖率”值。例如,对于索引位置 1001,我想要第 901-1000 行的平均“
import pandas as pd data = {'date': ['1998-03-01', '2001-04-01','1998-06-01','2001-08-01','2001-05-0
我有一个包含 100 个数字的 NSArray。我想创建一个 5 个数字的 NSArray。第二个数组中的第一个数字是第一个数组中前 20 个数字的平均值。第二个数字是第一个数组中第二组 20 个数字
我该怎么做?我试过 abs() 但它只适用于整数。有内置的方法吗? CGFloat flo = -123; abs(flo) 返回 0 最佳答案 使用 fabs() CGFloat f = -123.
我正在采用以下计算的 log2: tl_out.a.bits.size := log2Ceil(s1_row * s2_column * 4.U) 其中,s1_row 和 s2_column 是 UI
如何从 m 个元素集合中取出 n 个元素,以便在元素用完时从头开始? List list = new List() {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; List newL
我已经完成了研究,但似乎找不到有关该主题的足够文档。 在 Object streams 上尝试一些代码时,我注意到将 BufferedOutputStream 放入 ObjectOutputStrea
我需要计算数据中连续时间组之间的差异,如下所示 from io import StringIO import pandas as pd strio = StringIO("""\
我在 Mongo 数据库中有以下文档: { _id: 1, question: "Blue or red?", __v: 0, votes: [9, 5] } 我想在后
好吧,宇宙中一定有人知道这个问题的答案。 我已经在这里问过这个问题,但仍然没有解决方案。 我需要保留和换行 div 中的文本。到目前为止,我很难想出解决方案。我找到的最佳解决方案并不适用于所有浏览器。
我正在尝试采用 3 个单独的整数输入(年、月、日)并采用这 3 个条目并从中形成一个日期对象,以便我可以使用它来比较其他日期。 这是我目前所拥有的,不知从何而来: public void compar
在我的 IOS 项目中,我有一个包含该函数的自定义 Logger 类(单例) - (void)log:(NSString *)domain logLevel:(int)level logMessage
我是一名优秀的程序员,十分优秀!