最近天气越来越热了,电影院也上映了许多新电影,很适合去电影院看一看,豆瓣电影提供了一个页面来展示正在上映的新片。不过,这个页面提供的信息比较简略,如果想了解电影的详细信息,还需要点开一个个看,非常不方便。不过,这个页面也储存了电影的演员等详细信息,我们可以写一个爬虫来获取信息并存储到EXCEL表格。
我们先访问一下豆瓣: movie.douban.com/cinema/nowp… 作者是厦门的,因此查看厦门的信息,大家可以根据需要查询其他城市。
我们用到requests、Beautifulsoup、pandas库来完成这个爬虫,先导入三个库。
import requests
from bs4 import BeautifulSoup
import pandas as pd
然后用requests访问豆瓣,并加上请求头。
url = 'https://movie.douban.com/cinema/nowplaying/xiamen/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
用Beautifulsoup来解析数据,同时我们在网页上按F12,发现电影信息存在<ul class="lists">标签下,用find_all方法进行查询,获得一个列表,列表由0开始,发现我们需要的电影信息存在第三位,因此soup.find_all("ul","class"=="lists")[2],然后我们再用find_all方法将每条电影信息存入列表。
soup = BeautifulSoup(response.text, 'html.parser')
soup = soup.find_all("ul","class"=="lists")[2]
soups = soup.find_all('li',class_="list-item")
最后遍历列表提取我们需要的信息,包括电影名、评分、上映时间、导演、演员等,这里可以利用数据的标签获取需要的信息。这里要记得创建一个空列表movies来存储所有电影的信息,用一个字典data来给每部电影的信息分类。
movies = []
for movie in soups:
title = movie["data-title"]
rating = movie["data-score"]
release_date = movie["data-release"]
director = movie["data-director"]
actors = movie["data-actors"]
duration = movie["data-duration"]
link = movie.find("a")["href"]
data = {
'电影名': title,
'评分': rating,
'上映时间': release_date,
'导演': director,
'演员': ''.join(actors),
"时长":duration,
'链接': link
}
movies.append(data)
最后,将数据下载到本地,可以通过更改df.to_excel将数据保存到你需要的地方。
df = pd.DataFrame(movies)
df.to_excel('douban_movies.xlsx', index=False)
下面是完整代码。
import requests
from bs4 import BeautifulSoup
import pandas as pd
url = 'https://movie.douban.com/cinema/nowplaying/xiamen/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
soup = soup.find_all("ul","class"=="lists")[2]
soups = soup.find_all('li',class_="list-item")
# print(soups)
movies = []
for movie in soups:
title = movie["data-title"]
rating = movie["data-score"]
release_date = movie["data-release"]
director = movie["data-director"]
actors = movie["data-actors"]
duration = movie["data-duration"]
link = movie.find("a")["href"]
data = {
'电影名': title,
'评分': rating,
'上映时间': release_date,
'导演': director,
'演员': ''.join(actors),
"时长":duration,
'链接': link
}
movies.append(data)
# print(movies)
df = pd.DataFrame(movies)
df.to_excel('douban_movies.xlsx', index=False)