Код Javascript не извлекается с помощью кода Python - PullRequest
1 голос
/ 27 апреля 2019

Я пытаюсь извлечь ссылку .mp4 с веб-сайта, которая отображается только на вкладке «Проверка элемента» в веб-браузерах.

Я прочитал в Интернете, что мне нужно использовать селен и, например, PhantomJS, чтобы получить этот код. Я пробовал, но я получаю HTML-файл, который отображается в «Показать исходный код»

from selenium import webdriver

driver = webdriver.PhantomJS(executable_path=r'C:\Users\Nevendary\Desktop\phantomjs-2.1.1-windows\bin\phantomjs')
driver.get("https://filmovitica.com/pucanj-u-sljiviku-preko-reke-1978-domaci-film-gledaj-online/")
driver.implicitly_wait(30)

print(driver.page_source)

Я ожидаю получить код, который включает: https://fs40.gounlimited.to/tea5u5akd32qzxfffpqyfndb6resauu5w43w7enoxkvu6sjtrf5hfhbz3ika/v.mp4"

но я получаю просто нормальный HTML сайт

Ответы [ 3 ]

0 голосов
/ 27 апреля 2019

Вместо поиска по источнику страницы вы можете напрямую получить атрибут src элемента видео, который содержит ссылку, по которой вы переходите.

Ссылка на видео находится в iframe.получение источника страницы без переключения на фрейм не вернет ссылку на видео.

Я использовал хроматический драйвер для примера.

Попробуйте это:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

driver = webdriver.Chrome(executable_path="chromedriver.exe")

wait = WebDriverWait(driver, 20)
driver.get("https://filmovitica.com/pucanj-u-sljiviku-preko-reke-1978-domaci-film-gledaj-online/")

vframe = driver.find_element_by_xpath("//iframe[@width='900']")

driver.switch_to.frame(vframe)

videoElement = wait.until(EC.visibility_of(driver.find_element(By.CSS_SELECTOR, "#vplayer > div > div.container > video")))

print(videoElement.get_attribute('src'))

driver.quit()


0 голосов
/ 27 апреля 2019

Изучая html, действительно создается впечатление, что ссылка создается внутри того же URL-адреса, который использует iframe. Вы можете использовать запросы, чтобы получить это:

import requests
from bs4 import BeautifulSoup
res = requests.get('https://filmovitica.com/pucanj-u-sljiviku-preko-reke-1978-domaci-film-gledaj-online/')
soup = bs(res.content, 'lxml')
print(soup.select_one('iframe[allowfullscreen]')['src'])

Вы можете найти, как она (ваша строка) генерируется в одном из тегов скрипта в URI (см. Строку, выделенную в начале синим цветом:

enter image description here

Позже в этом js:

enter image description here

0 голосов
/ 27 апреля 2019

Вместо PhantomJS попробуйте использовать ChromeDriver с headless параметрами. Это даст мне вывод, который вам нужен.

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver=webdriver.Chrome(executable_path='path of chrome driver',options=chrome_options)
driver.get("https://filmovitica.com/pucanj-u-sljiviku-preko-reke-1978-domaci-film-gledaj-online/")
print(driver.page_source)

Примечание: Вы можете скачать chromedriver по следующей ссылке, если неУ вас есть chromedriver, установленный в зависимости от совместимости вашего браузера. Пожалуйста, прочтите примечания к выпуску, прежде чем загружать любой драйвер chrome для совместимости. Скачать драйвер Chrome

Еще один способ сделать это с помощью Beautiful Soup, который является библиотекой python.

 import requests
    from bs4 import BeautifulSoup
    data=requests.get('https://filmovitica.com/pucanj-u-sljiviku-preko-reke-1978-domaci-film-gledaj-online/')
    soup=BeautifulSoup(data.text,'html.parser')
    print(soup)

Примечание: его легко установить pip install beautifulsoup4 Вы можете проверитьСледующая ссылка о Beautiful Soup Beautiful Soup

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...