爬虫仅限于知识学习,本代码不得用于任何商业活动侵权,如有不适,请联系博主进行修改或者删除。
今天总结的第三篇,这些个代码是模仿着写出来的,这儿我着重写我觉有用的东西了,一上午过去了,还只弄完三篇,时间好紧张啊。
访问的是https://www.douyin.com/share/user/63692754272的抖音,找到其url,并进行访问
首先摆出源码
import requests
import json
url="https://www.douyin.com/web/api/v2/aweme/like/?user_id=63692754272&sec_uid=&count=21&max_cursor=0&aid=1128&_signature=t.9P0BAd6rId0A9Qpgu2N7f.T8&dytk=102f4e17eb7a0ff33c5500bb284aaeda"
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3676.400 QQBrowser/10.4.3469.400'
}
cookies={
'cookie':'ga=GA1.2.13243249.1563845400; _gid=GA1.2.1780807193.1566271470; _ba=BA0.2-20190820-5199e-CteeFBBR2NT79iyj4gab'
}
count=1
while True:
result = requests.get(url, headers=headers)
result.encoding='utf-8'
# result1=json.loads(result.text)
result1=result.json()
if len(result1.get("aweme_list")) !=0:
break
print("访问第{}次".format(count))
count=count+1
print(result1)
x=0
for i in result1['aweme_list']:
m=i['video']['download_addr']['uri']
paqu='https://aweme.snssdk.com/aweme/v1/playwm/?video_id='+m
# title = i['desc']
# print(title)
x+=1
while True:
mp4 = requests.get(paqu, headers=headers, stream=True).content
if mp4!=None:
break
open(str(x)+ '.mp4', 'wb').write(mp4)
print('爬取完成')
然后着一进行分析
访问的网址是:https://www.douyin.com/share/user/63692754272/,用访问者的形式进行访问,避免反扒,这是最初级的方式,高级一点的就是再加上cookie,虽然不知道有啥用,感觉加上以后,出错的情况小很多了,解码这儿用的是utf-8
import requests
import json
url="https://www.douyin.com/web/api/v2/aweme/like/?user_id=63692754272&sec_uid=&count=21&max_cursor=0&aid=1128&_signature=t.9P0BAd6rId0A9Qpgu2N7f.T8&dytk=102f4e17eb7a0ff33c5500bb284aaeda"
headers={
'user-agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3676.400 QQBrowser/10.4.3469.400'
}
cookies={
'cookie':'ga=GA1.2.13243249.1563845400; _gid=GA1.2.1780807193.1566271470; _ba=BA0.2-20190820-5199e-CteeFBBR2NT79iyj4gab'
}
因为抖音具有一种反扒措施,它这个访问结果不一定会有,需要反复访问,因此我写了个while循环,直到访问到结果
count=1
while True:
result = requests.get(url, headers=headers)
result.encoding='utf-8'
# result1=json.loads(result.text)
result1=result.json()
if len(result1.get("aweme_list")) !=0:
break
print("访问第{}次".format(count))
count=count+1
print(result1)
将这一条内容放到bejson中进行解析(bejson可以百度找到)
然后再依据内容,找到我们需要的下载地址,视频的下载,需要使用其视频链接,以二进制、流的形式进行导出
for i in result1['aweme_list']:
m=i['video']['download_addr']['uri']
paqu='https://aweme.snssdk.com/aweme/v1/playwm/?video_id='+m
# title = i['desc']
# print(title)
x+=1
while True:
mp4 = requests.get(paqu, headers=headers, stream=True).content
if mp4!=None:
break
open(str(x)+ '.mp4', 'wb').write(mp4)
存在一个未解决的问题,按理来说这儿是可以按照视频名字来命名的,但是程序执行到第四个时,会报错,我将名字换成了数字之后(也就是x),就能正常爬取了,不知道这是啥反扒措施,有大佬能解决的话,欢迎评论区留言。