Как получить видео src с помощью BeautifulSoup в Python

#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 , есть какие-нибудь идеи, почему?