链接:https://movie.douban.com/top250?start=0&filter
分析url后发现start=0为指定页数的字段,每页有25条所需数据,一共就有10页。
接下来分析我们需要的数据并找出它们的特征,以方将它们从原数据中取出来,需要的字段有电影名称、导演姓名、主演姓名、时间、地区、剧情,如下图
按F12进入控制台后查看该位置的元素标签,如下图:
发现所需信息全都在<div class="info">中,用bs取出
infos = soup_1.find_all("div", attrs={"class": "info"})
得到后发现infos的长度刚好是25,很棒的结果,下面只需要对infos的每个item操作取出我们需要的数据就ok了
titles = info.find_all("span")
title_zh= titles[0].get_text()
print(title_zh)
extra_infos = info.find("div", attrs={"class": "bd"}).find("p").get_text().strip().replace("'", "\\'").split("\n") # 导演演员类别
dir_actors = extra_infos[0].split("\xa0\xa0\xa0")
print(dir_actors)
director = dir_actors[0].split("/")[0][4:].strip() # 导演
if len(dir_actors) > 1:#实际爬取中发现有些电影的演员没有显示出来,所以取不到,这里要做非空判断
actor = dir_actors[1].split("/")[0][4:].strip() # 演员
year_area_genre = extra_infos[1].strip().replace("\xa0", "")
print(year_area_genre)
year, area, genre = re.match("(.+)[/]{1}(.+)[/]{1}(.+)", year_area_genre).groups() # 时间/地区/剧情
然后mysql建库建表:
create database douban;
user douban;
create table top250(
director varchar(50) COMMENT "导演",
actor varchar(50) COMMENT "演员",
year_ varchar(10) COMMENT "时间",
area varchar(50) COMMENT "地区",
genre varchar(150) COMMENT "剧情",
name_ varchar(50) COMMENT "名称");
接下来就可以将爬取到的数据存入mysql了
网友评论