1. Используйте более простой подход
В моем предыдущем блоге я использовал метод создания URL-адреса для получения коротких видеороликов Douyin, но сегодня, когда я снова изучал короткие видеоролики Douyin, я нашел более простой метод и обнаружил, что мой предыдущий анализ был слишком утомительным, поэтому я написал блог, чтобы запишите этот метод.
В отличие от предыдущего блога, этот метод может опускать многие этапы анализа.
Откройте любую личную домашнюю страницу Douyin, я выбрал iQiyi Sports, затем щелкните правой кнопкой мыши, чтобы проверить элементы веб-страницы, выберите опцию xhr на вкладке сети и проанализируйте захваченные пакеты.
Нажмите на вкладку предварительного просмотра,Нажмитеvideo->download_addr->url_list
Я обнаружил, что два следующих URL-адреса являются в точности URL-адресами видео (конструировать вообще не нужно, но URL-адрес спрятан немного глубоко и требует много терпения, чтобы его найти), откройте URL-адрес для просмотра:
Когда я извлек этот URL-адрес, я думал, что все кончено, но большой парень @jintingyuli прислал мне статью, которая напомнила мне то, о чем я не подумал, и мне хотелось бы выразить свою благодарность!
Давайте продолжим смотреть вниз. Ниже под play_addr есть ссылка. Видео под этой ссылкой представляет собой версию видео без водяных знаков.
ок, теперь нам просто нужно найти способ извлечь его, и все готово
Метод, который я использовал на этот раз, использовал модуль jsonpath, который можно загрузить напрямую через pip:
pip install jsonpath
2. Код
import requests
import json
import jsonpath
class Douyin:
def page_num(self,max_cursor):
#Случайный код
random_field = '00nvcRAUjgJQBMjqpgesfdNJ72&dytk=4a01c95562f1f10264fb14086512f919'
#Тело URL-адреса
url = 'https://www.iesdouyin.com/web/api/v2/aweme/post/?sec_uid=MS4wLjABAAAAU7Bwg8WznVaafqWLyLUwcVUf9LgrKGYmctJ3n5SwlOA&count=21&max_cursor=' + str(max_cursor) + '&aid=1128&_signature=' + random_field
#Заголовок запроса
headers = {
'user-agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36',
}
response = requests.get(url,headers=headers).text
#Преобразовать в данные JSON
resp = json.loads(response)
#Извлечь в max_cursor
max_cursor = resp['max_cursor']
#Траверс
for data in resp['aweme_list']:
# Видео введение
video_title = data['desc']
#Используйте синтаксис jsonpath для извлечения paly_addr
video_url = jsonpath.jsonpath(data,'$..paly_addr')
for a in video_url:
#Извлекаем адрес первой ссылки
video_realurl = a['url_list'][1]
# запросить видео
video = requests.get(video_realurl, headers=headers).content
with open('t/' + video_title, 'wb') as f:
print('Загрузка:', video_title)
f.write(video)
#Определите условия прекращения создания URL-адреса
if max_cursor==0:
return 1
else:
douyin.page_num(max_cursor)
if __name__ == '__main__':
douyin = Douyin()
douyin.page_num(max_cursor=0)
3. Преимущества
Преимущество этого метода в том, что он позволяет сохранить большую часть шагов анализа URL-адреса и не вызывает веб-драйвер (вы не можете ограничивать браузер), скорость будет значительно улучшена, а полученное видео будет без водяных знаков.
4. Недостатки
Проблема случайной генерации строк до сих пор не решена, и операция становится более хлопотной.
5. Как использовать
https://github.com/jjjjmhao/Sprider/blob/master/simplescreenrecorder-2020-05-04_23.54.22.mkv