2015-02-25 4 views
2

Хорошо, я слишком долго царапаю себе голову. Я пытаюсь получить URL-адрес для встроенного видео на веб-странице с помощью Beautiful Soup и запрашивать модули в Python 2.7.6. Я проверяю html в chrome, и я вижу URL-адрес видео, но когда я получаю страницу с помощью запросов и использую Beautiful Soup, я не могу найти узел «видео». Исходя из источника, похоже, что видео-окно представляет собой вложенный html-документ. Я искал все и не могу понять, почему я не могу это получить. Если бы кто-нибудь мог указать мне в правильном направлении, я был бы очень признателен. Благодарю.Python, проблема с подключением видеоролика

здесь является гиперссылка на одном из видео:

http://www.growingagreenerworld.com/episode125/

ответ

5

Проблема заключается в том, что существует iframe с video тега, внутри которого загружается асинхронно в браузере.

Хорошей новостью является то, что вы можете имитировать это поведение, сделав дополнительный запрос на URL-адрес iframe, передавая текущий URL-адрес страницы как Referer.

Реализация:

import re 

from bs4 import BeautifulSoup 
import requests 

url = 'http://www.growingagreenerworld.com/episode125/' 
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36'} 

with requests.Session() as session: 
    session.headers = headers 

    response = session.get(url) 

    soup = BeautifulSoup(response.content) 

    # follow the iframe url 
    response = session.get('http:' + soup.iframe['src'], headers={'Referer': url}) 
    soup = BeautifulSoup(response.content) 

    # extract the video URL from the script tag 
    print re.search(r'"url":"(.*?)"', soup.script.text).group(1) 

Печать:

http://pdl.vimeocdn.com/43109/378/290982236.mp4?token2=1424891659_69f846779e96814be83194ac3fc8fbae&aksessionid=678424d1f375137f 
+0

Я получаю сообщение об ошибке: 'ответ = session.get ('HTTP:' + soup.iframe [ 'SRC'], заголовки = {'Referer': url}) TypeError: объект 'NoneType' не имеет атрибута '__getitem __' ' –

Смежные вопросы