Ошибка в работе скрипта.

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
IDLE (Python 3.10 64-bit)
Win 10
—————————–
Нужно найти строку в странице: https://zen.yandex.ru/video/watch/62795871aef4a05c45c72ced?t=39
Строка выглядит так:
Есть скрипт:
Python:
 import re
from urllib.request import urlopen
html = urlopen ("https://zen.yandex.ru/video/watch/62795871aef4a05c45c72ced?t=39").read().decode("utf-8")
m = ['a-z']
a = re.findall((r'https', '/master.m3u8'), html)
print(a)
————————-
Выдаёт ошибку:
Traceback (most recent call last):
File “C:\Users\Пк\Desktop\Как найти ссылку в html python\1.py”, line 6, in <module>
a = re.findall((r'https', ‘/master.m3u8’), html)
File “C:\Python\lib\re.py”, line 240, in findall
return _compile(pattern, flags).findall(string)
File “C:\Python\lib\re.py”, line 302, in _compile
raise TypeError(“first argument must be string or compiled pattern”)
TypeError: first argument must be string or compiled pattern
Я искал ранее так:
1. Сохранял страницу html себе на ПК.
2. Открывал этот html блокнотом Notepad++
3. Поиск m3u8
4. Копирую найденную ссылку.
Без скрипта долго и не удобно.

Что-то сделал не так. Подскажите как исправить ?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
932
208
43
20
Москва
Вот скрипт который ищет все m3u8 ссылки
Python:
import requests as req
import re

url = "https://zen.yandex.ru/video/watch/62795871aef4a05c45c72ced?t=39"
text = req.get(url).text
links = re.findall(r'yandex\.ru/vod/zen-vod/[^"]+\.m3u8', text)
print(*links, sep='\n')
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
932
208
43
20
Москва
1) Ошибка в том, что ты передаешь кортеж первым аргументом
Python:
re.findall((r'https', '/master.m3u8'), html)
# (r'https', '/master.m3u8') это кортеж, нужна строка

2) Чтобы искать что-то в html есть библиотека bs4

3) Таких ссылок много на страницы, я так понимаю все видео
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Спасибо Vershitel_sudeb
Скрипт сработал отлично.

Но ссылки получились обрезанные с начала:
yandex.ru/vod/zen-vod/vod-content/d65a83bba89b63e61300f9e26da19b2b/a83029a6-d4f73007-dcba481d-d58c2c8f/kaltura/desc_64ff1ce872df6aae37aedc9d2869df09/86534225505746213/ysign1=0b0f6a81c12e0b3a8db1a058e2975cc52c1a08e9e8b74572e9b4f2d23e18d90f,abcID=967,from=zen,pfx,sfx,ts=628e56a1/master.m3u8
-----------------------
Обрезалось начало ссылки вот это: https://strm.
И сссылок очень много, а нужно одну.
А так всё рабочее. Огромное спасибо.
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
932
208
43
20
Москва
Замени
Код:
r'yandex\.ru/vod/zen-vod/[^"]+\.m3u8'
Код:
r'https://strm\.yandex\.ru/vod/zen-vod/[^"]+\.m3u8'

А насчёт того, что ссылок много, я не знаю какая из них нужна
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Спасибо Vershitel_sudeb
Теперь всё супер.
Проверил. Нужно первая ссылка.
Ниже какие-то другие видео.
Удачи Вам и здоровья.
----------------------------------
Немного добавил для удобства:
Python:
import requests as req
import re

url = input("Введите URL: \n")
text = req.get(url).text
links = re.findall(r'https://strm\.yandex\.ru/vod/zen-vod/[^"]+\.m3u8', text)
print(*links, sep='\n\n')
 
Последнее редактирование:
  • Мне нравится
Реакции: Vershitel_sudeb

Форум IT Специалистов