我想在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)
答案 0 :(得分:0)
首先,请阅读您要抓取的网站的条款。
下一步,您需要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'})]
答案 1 :(得分:0)
在“网络”标签中可以找到一个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)