Использование Python для очистки списка Sky Cinema - PullRequest
0 голосов
/ 28 апреля 2019

Я хотел бы собрать список фильмов и их ссылки на все доступные фильмы на сайте Sky Cinema.

Веб-сайт:

http://www.sky.com/tv/channel/skycinema/find-a-movie#/search?genre=all&window=skyCinema&certificate=all&offset=0&scrollPosition=200

Я использую 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)

Ответы [ 2 ]

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

На вкладке сети есть 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)
0 голосов
/ 28 апреля 2019

Прежде всего, прочитайте условия сайта, который вы собираетесь очистить.

Далее вам нужно 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'})]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...