爬蟲僅限于知識學習,本代碼不得用于任何商業活動侵權,如有不適,請聯系博主進行修改或者刪除。
今天總結的第三篇,這些個代碼是模仿著寫出來的,這兒我著重寫我覺有用的東西了,一上午過去了,還只弄完三篇,時間好緊張啊。
訪問的是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),就能正常爬取了,不知道這是啥反扒措施,有大佬能解決的話,歡迎評論區留言。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
