Как очистить HTML с помощью Python для NOWTV доступных фильмов - PullRequest
0 голосов
/ 27 апреля 2019

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

Это будет с URL (https://www.nowtv.com/stream/all-movies)

Выводить для каждого доступного фильма.

Не уверен, с чего начать, хотел бы использовать Python и Beautiful Soup.Любая помощь будет отличной. Спасибо.

Код пока:

from bs4 import BeautifulSoup                                          
import urllib2                                                         

url = "https://www.nowtv.com/stream/all-movies"                    

data = urllib2.urlopen(url).read()        

Ответы [ 2 ]

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

Вы можете имитировать, что страница делает с точки зрения разбитых на страницы результатов (https://www.nowtv.com/stream/all-movies/page/1)) и извлекать фильмы из тега сценария каждой страницы. Хотя в приведенном ниже примере может быть использован некоторый повторный факторинг, он показывает, как получить общее количествоколичество фильмов, рассчитайте количество фильмов на странице и отправьте запросы на получение всех фильмов, используя Session для эффективности. Результат - 1425 фильмов.

import requests
import re
import json
import math
import pandas as pd

titles = []
links = []
base = 'https://www.nowtv.com'
headers = {'User-Agent' : 'Mozilla/5.0'}

with requests.Session() as s:
    res = s.get('https://www.nowtv.com/stream/all-movies/page/1') 
    r = re.compile(r"var propStore = (.*);")
    data = json.loads(r.findall(res.text)[0])
    first_section = data[next(iter(data))]
    movies_section = first_section['props']['data']['list']
    movies_per_page = len(movies_section)
    total_movies = int(first_section['props']['data']['count'])
    pages = math.ceil(total_movies / movies_per_page)

    for movie in movies_section:
        titles.append(movie['title'])
        links.append(base + movie['slug'])

    if pages > 1:
        for page in range(2, pages + 1):
            res = s.get('https://www.nowtv.com/stream/all-movies/page/{}'.format(page)) 
            r = re.compile(r"var propStore = (.*);")
            data = json.loads(r.findall(res.text)[0])
            first_section = data[next(iter(data))]
            movies_section = first_section['props']['data']['list']
            for movie in movies_section:
                titles.append(movie['title'])
                links.append(base + movie['slug'])

df = pd.DataFrame(list(zip(titles, links)), columns = ['Title', 'Link'])
0 голосов
/ 27 апреля 2019

Я не уверен, каков ваш ожидаемый результат.Вы имеете в виду что-то подобное?

from bs4 import BeautifulSoup
import requests

link = "https://www.nowtv.com/stream/all-movies"
r = requests.get(link)
page = BeautifulSoup(r.content, "html.parser")

for dd in page.find_all("div", {"class":"ib-card-info-container"}):
    title = dd.find(class_="ib-card-title ib-colour-v1_white").text.strip()
    date = dd.find(class_="ib-card-availability-container ib-colour-20Grey").text.strip()
    print(title + " --> " + date)
...