Я хотел бы собрать список фильмов и их ссылки на все доступные фильмы на сайте Sky Cinema.
Сайт:
Я использую Python 3.6 и Beautiful Soup.
У меня проблемы с поиском названия и ссылки. Тем более, что есть несколько страниц, по которым можно щелкнуть - возможно, в зависимости от положения прокрутки (в URL-адресе?)
Я пробовал использовать BS и Python, но результата нет. Код, который я пробовал, вернул бы только заголовок. Я бы хотел название и ссылку на фильм. Поскольку они находятся в разных областях сайта, я не знаю, как это делается.
Код, который я пробовал:
from bs4 import BeautifulSoup
import requests
link = "http://www.sky.com/tv/channel/skycinema/find-a-movie#/search?genre=all&window=skyCinema&certificate=all&offset=0&scrollPosition=200"
r = requests.get(link)
page = BeautifulSoup(r.content, "html.parser")
for dd in page.find_all("div", {"class":"sentence-result-infos"}):
title = dd.find(class_ = "title ellipsis ng-binding").text.strip()
print(title)
spans=page.find_all('span', {'class': 'title ellipsis ng-binding'})
for span in spans:
print(span.text)
Я хотел бы, чтобы результат отображался как заголовок, ссылка.
Обновлено:
Я только что попробовал следующее, но получить «текст» не является атрибутом:
from bs4 import BeautifulSoup
from requests_html import HTMLSession
session = HTMLSession()
response = session.get('http://www.sky.com/tv/channel/skycinema/find-a-movie/search?genre=all&window=skyCinema&certificate=all&offset=0&scrollPosition=200')
soup = BeautifulSoup(response.content, 'html.parser')
title = soup.find('span', {'class': 'title ellipsis ng-binding'}).text.strip()
print(title)
На странице, когда вы нажимаете на постер, он переходит к вам на страницу. Он находится в разделе «sentence-result-pod ng-isolate-scope», связанном через href. Например: <a class = "sentence-result-pod ng-isolate-scope" href = "/tv/movie/death-race-beyond-anarchy-2018?genre=all&window=skyCinema&certificate= все" data-search = "search" data-ng-click = "takeMeToMovieDetails($event)" data-movie = "movie">






Прежде всего, ознакомьтесь с условиями сайта, который вы собираетесь парсить.
Далее вам нужно selenium:
from selenium import webdriver
import bs4
# MODIFY the url with YOURS
url = "type the url to scrape here"
driver = webdriver.Firefox()
driver.get(url)
html = driver.page_source
soup = bs4.BeautifulSoup(html, "html.parser")
baseurl = 'http://www.sky.com/'
titles = [n.text for n in soup.find_all('span', {'class':'title ellipsis ng-binding'})]
links = [baseurl+h['href'] for h in soup.find_all('a', {'class':'sentence-result-pod ng-isolate-scope'})]
Спасибо тебе за это. Мне пришлось сменить Firefox на Chrome. Когда я запускаю приведенное выше и добавляю URL-адрес (из исходного сообщения), я получаю пустую страницу Chrome без данных. Еще раз спасибо.
Прочтите эта почта, чтобы использовать драйвер Chrome для selenium.
На вкладке сети есть API. Вы можете получить все результаты одним звонком. Вы можете установить ограничение на число, превышающее ожидаемый результат.
r = requests.get('http://www.sky.com/tv/api/search/movie?limit=10000&window=skyMovies').json()
Или используйте номер, который вы можете увидеть на странице
import requests
import pandas as pd
base = 'http://www.sky.com/tv'
r = requests.get('http://www.sky.com/tv/api/search/movie?limit=1555&window=skyMovies').json()
data = [(item['title'], base + item['url']) for item in r['items']]
df = pd.DataFrame(data, columns = ['Title', 'Link'])
print(df)
Что вы имеете в виду под ссылкой? Пожалуйста, приведите пример ссылки на заголовок.