抖音用的是什么反扒机制?怎么应对这反扒机制?
本帖最后由 非凡 于 2021-11-15 18:13 编辑在试图爬取抖音的短视频时发先一个这样的情况:
首先:
抖音的视频资源是动态加载的,视频资源的包是
这本也不算什么,根据包的url爬取资源就是了。
但是:
这视频资源的几个包没由什么明显的规律。下面是同一网页下的4个视频资源包的url
url4 = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA&max_cursor=1554967168000&count=10&publish_video_strategy_type=2&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.69+Safari/537.36+Edg/95.0.1020.53&browser_online=true&msToken=67fKhMC_DOBVizOJ_90hL1U5YOv-BFiS9N3L6zvEkLoG1l3klprxDvLIqdXqvvVWaVULmBnoGKIKkT9sM8oD7uz5W7uia2eeCV0EkQSZpIzr0CKgMbq3G0tEpA==&X-Bogus=DFSzsdVLzaJANH4lS7-PXc54Da62&_signature=_02B4Z6wo00001LPNYPgAAIDBX6bM3HmW-ySzyWRAAE1m87DgKa7sy5DoD8351IMgesfFtDtbv8SwWqrao3uL3V.9wiCZEGoQlvqppjX2j4kkxNEQXZYclL2pBvN5-MIZMQ9eMD237Ap2xB.xba'
url3 = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA&max_cursor=1555830333000&count=10&publish_video_strategy_type=2&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.69+Safari/537.36+Edg/95.0.1020.53&browser_online=true&msToken=67fKhMC_DOBVizOJ_90hL1U5YOv-BFiS9N3L6zvEkLoG1l3klprxDvLIqdXqvvVWaVULmBnoGKIKkT9sM8oD7uz5W7uia2eeCV0EkQSZpIzr0CKgMbq3G0tEpA==&X-Bogus=DFSzsdVLtW0ANH4lS7-PIQ54Da6P&_signature=_02B4Z6wo000019EoY5gAAIDCPUPPv39lPefRLGcAAJXh87DgKa7sy5DoD8351IMgesfFtDtbv8SwWqrao3uL3V.9wiCZEGoQlvqppjX2j4kkxNEQXZYclL2pBvN5-MIZMQ9eMD237Ap2xB.x19'
url2 = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA&max_cursor=1556706031000&count=10&publish_video_strategy_type=2&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.69+Safari/537.36+Edg/95.0.1020.53&browser_online=true&msToken=twRSlOjltAT2zPZmbZdxdb-bR5WLWpsD84ByDVPKc0IhiLG44D4G7NN1Gc-eDtfLQq3xUyctzKi7oBH-NUPvDw6sE7TIlh5JWUXZZuN4NPKujwOYRNoPzh-Bj1I=&X-Bogus=DFSzsdVOiXhANxaNS7-FtO54Da6C&_signature=_02B4Z6wo000018-VBGQAAIDCI.6oQ9csIRvPkQDAAJKAw5mHbWKMvbXIFTGDSgCKx.nJAti3X50MjcqmbXV6YojDEXYtMxwbH5ohF38cJCELD4mMFVqaRA2cShSkkYtJR6sarvfDjFEHu8D46f'
url1 = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA&max_cursor=1583639919000&count=10&publish_video_strategy_type=2&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.69+Safari/537.36+Edg/95.0.1020.53&browser_online=true&msToken=twRSlOjltAT2zPZmbZdxdb-bR5WLWpsD84ByDVPKc0IhiLG44D4G7NN1Gc-eDtfLQq3xUyctzKi7oBH-NUPvDw6sE7TIlh5JWUXZZuN4NPKujwOYRNoPzh-Bj1I=&X-Bogus=DFSzsdVO2LhANxaNS7-Ftc54Da18&_signature=_02B4Z6wo000019w8H3gAAIDCMFezXSgNUnvcOBvAAJamkf9fCtc8vB4XSkwEyPolT2cZEySf2qypoNwYnMzrWnZ.xesnKj5rPLyEywsyS4sjVvoiEt.iQftPIbMdMmsUCGL4yQLPPrb2ke.N55'
url不同的地方max_cursor=和是_signature=_
这是什么反爬机制?
更麻烦的是:
每刷新重加载一次页面,就算是加载的相同的视频资源,但他这些资源包的url都是不一样的。我这例子里视频是漫威影业官方账号的短视频。链接是https://www.douyin.com/user/MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA
这样一来,我就算把视频资源包的url复制下来,用在爬虫代码上也是爬不到任何资源的。
这种反爬机制是什么?该怎么应对?
萌新学习中。。{:10_257:} 妈呀,不知道 可能抖音为了保护up主的权益,所以不让爬 {:10_279:} 代码发全。 妈呀,不知道 萌新学习中。。 作为萌新 看的我是一脸懵 萌新蒙了{:10_269:} 不太清楚 suchocolate 发表于 2021-11-16 09:25
代码发全。
import json
import requests
from lxml import etree
header = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36 Edg/95.0.1020.53'}
url = 'https://www.douyin.com/aweme/v1/web/aweme/post/?device_platform=webapp&aid=6383&channel=channel_pc_web&sec_user_id=MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA&max_cursor=1583639919000&count=10&publish_video_strategy_type=2&version_code=170400&version_name=17.4.0&cookie_enabled=true&screen_width=1920&screen_height=1080&browser_language=zh-CN&browser_platform=Win32&browser_name=Mozilla&browser_version=5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/95.0.4638.69+Safari/537.36+Edg/95.0.1020.53&browser_online=true&msToken=twRSlOjltAT2zPZmbZdxdb-bR5WLWpsD84ByDVPKc0IhiLG44D4G7NN1Gc-eDtfLQq3xUyctzKi7oBH-NUPvDw6sE7TIlh5JWUXZZuN4NPKujwOYRNoPzh-Bj1I=&X-Bogus=DFSzsdVO2LhANxaNS7-Ftc54Da18&_signature=_02B4Z6wo000019w8H3gAAIDCMFezXSgNUnvcOBvAAJamkf9fCtc8vB4XSkwEyPolT2cZEySf2qypoNwYnMzrWnZ.xesnKj5rPLyEywsyS4sjVvoiEt.iQftPIbMdMmsUCGL4yQLPPrb2ke.N55'
#
res = requests.get(url=url,headers=header,files=False)
res.encoding = 'utf-8'
#这里就卡了,url是从视频资源包了复制来的,可每次取爬都是空的。后来才发现,视频资源包在每刷新一次网页用的url都是新的
html = res.text
#
doc = etree.HTML(html)
info_id = r'//*[@id="root"]/div/div/div/div/div/div/ul/li/a/@href'
tag_id = doc.xpath(info_id)
抖音的网址是https://www.douyin.com/user/MS4w ... dJaemZo3Aw6piEtkdOA
suchocolate 发表于 2021-11-16 09:25
代码发全。
本是想先爬这页码里所有短视频的id+名字
然后再根据需求去选择爬取想要的视频,
但在爬这所有短视频i+名字这一环节就卡了。
这个加载视频资源的包里请求的URL,似乎就不是固定的。。。每刷新一次都用的是新的url 非凡 发表于 2021-11-16 15:34
抖音的网址是https://www.douyin.com/user/MS4w ... dJaemZo3Aw6piEtkdOA
我看数据就在首页的script里,只是这些数据得带着获取的cookie才会给,就不去想cookie是如何获取的了,直接用。
import requests
import re
import json
from urllib.parse import unquote
def main():
url = 'https://www.douyin.com/user/MS4wLjABAAAAF5ZfVgdRbJ3OPGJPMFHnDp2sdJaemZo3Aw6piEtkdOA'
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0',
'Cookie': 'douyin.com; ttcid=1eef9e1593174202a6502ba9a8adc15a38; ttwid=1%7CmTJ8W2IDo5wALE9iTflbSuLgc653qxQKNAa836k6VNw%7C1636973364%7Ceef3e447b528058e86494392c5fec3a9ee4cf5e0caccfc8b67a08afd39e50bb6; _tea_utm_cache_6383=undefined; MONITOR_WEB_ID=6f9e2e5e-201a-4cba-9c2a-155ec43ec72a; passport_csrf_token_default=a8c02b258607e12a63c5aa5277e67046; passport_csrf_token=a8c02b258607e12a63c5aa5277e67046; _tea_utm_cache_1300=undefined; s_v_web_id=verify_kw1c9lug_a6z5YYyS_AWQD_4uLD_9jNp_3aFqTWXAG3Wk; __ac_nonce=06192fe1600efd2f548a4; __ac_signature=_02B4Z6wo00f010oZ.OAAAIDDSL4VSgFGbQNKOPhAALMfzkcLVN8kvHY8F8.4A5amrjhSxq1fBh5cV3Mb3lmu6n1vBZEZ7g2-OJbAE0HGGN.q9D4vlb32.SAnb8XjxYYKuIgSkmi4eQazA1DF9a; tt_scid=C0M3O402-fU-VBfYxHGPmlsoqbSakOcoEu.tZyQN77ZsgRlym3rpw02qacKtgxBob80a; msToken=yr6BsU_SWQro4Rh2yvuOQxuc5QSYIy1qpRn6SaTC6DGgql7tMepxNK68hBZNpUGhoN25aikbN2V1h1iqif4dA9Wv7_VQlxhXhuTrhht5e0T9git4KwgyVaHb6A=='}
r = requests.get(url, headers=headers)
result = re.findall(r'"application/json">(.*?)</script>', r.text)
result = unquote(result)# 解码一下html编码
result = json.loads(result)
datas = result['C_18']['post']['data']
for data in datas:
print(data['video']['playAddr']['src'])
print(data['video']['playAddr']['src'])
print('=' * 100)
if __name__ == '__main__':
main()
{:10_254:} {:5_91:} 本帖最后由 非凡 于 2021-11-16 17:56 编辑
suchocolate 发表于 2021-11-16 16:02
我看数据就在首页的script里,只是这些数据得带着获取的cookie才会给,就不去想cookie是如何获取的了,直 ...
这个只是首页访问时加载的前10个视频资源,这里账户里一共有72视频资源,如果想要爬去其它的资源该怎么操作?
是不是只能用到element去将所有资源加载出来后再去爬?
能不能找到这数据包的url之间的规律? {:10_296:} 萌新学习中。 萌新学习{:10_256:}