#python #python-3.x #beautifulsoup
#python #python-3.x #beautifulsoup
Вопрос:
Я пытаюсь найти загружаемые ссылки на видео на веб-сайте. Например, я работаю с такими URL https://www.loc.gov/item/2015669100/
-адресами. Вы можете видеть, что под тегом div есть ссылка на видео m3u8 mejs__mediaelement
.
Однако мой код ничего не печатает. Это означает, что он не находит URL-адреса видео для веб-сайта.
Мой код приведен ниже
from bs4 import BeautifulSoup
from urllib.request import Request, urlopen
with open('pages2crawl.txt', 'r') as inFile:
lines = [line.rstrip() for line in inFile]
for page in lines:
req = Request(page, headers={'User-Agent': 'Mozilla/5.0'})
soup = BeautifulSoup(urlopen(req).read(), 'html.parser')
pages = soup.findAll('div', attrs={'class' : 'mejs__mediaelement'})
for e in pages:
video = e.find("video").get("src")
if video.endswith("m3u8"):
print(video)
Комментарии:
1. Ваша проблема в том, что ваш тег serached div не будет доставлен (мне). Я вижу файл m3u8, но ни один из его родителей не является div с этим заданным классом (в браузере я вижу этот div). Возможно, вы получаете другие данные, кроме вашего браузера, из-за пользовательского агента. Вы должны посмотреть ответы, чтобы найти другой способ поиска, или попытаться получить те же данные, что и ваш браузер
Ответ №1:
Если вы просто хотите создать простой скрипт, вероятно, было бы проще использовать регулярное выражение.
import re, requests
s = requests.Session() #start the session
data = s.get(url) #http get request to download data
data = data.text #get the raw text
vidlinks = re.findall("src='(.*?).m3u8'/>", data) #find all between the two parts in the data
print(vidlinks[0] ".m3u8") #print the full link with extension
Ответ №2:
Вы можете использовать CSS-селектор source[type="application/x-mpegURL"]
для извлечения ссылки MPEG (или source[type="video/mp4"]
для извлечения ссылки mp4):
import requests
from bs4 import BeautifulSoup
url = "https://www.loc.gov/item/2015669100/"
soup = BeautifulSoup(requests.get(url).content, "html.parser")
link_mpeg = soup.select_one('source[type="application/x-mpegURL"]')["src"]
link_mp4 = soup.select_one('source[type="video/mp4"]')["src"]
print(link_mpeg)
print(link_mp4)
С принтами:
https://tile.loc.gov/streaming-services/iiif/service:afc:afc2010039:afc2010039_crhp0001:afc2010039_crhp0001_mv04/full/full/0/full/default.m3u8
Комментарии:
1. Привет, Андрей, мне нравится твой ответ, я пытался узнать источник видео на веб-странице » www1.wdr.de/fernsehen/lokalzeit/ostwestfalen/videos / … «но я получил сообщение об ошибке
TypeError: 'NoneType' object is not subscriptable
, есть какие-нибудь идеи, почему?