Python练习之爬取豆瓣电影TOP250

上代码:

'''
先爬豆瓣top250的电影,并放入一个表格中去。
思路:
先爬取最小共同父级标签
,然后针对每一个父级标签,提取里面的序号/电影名/评分/推荐语/链接。 然后将其放入csv表格中去。 ''' #导入库,csv用来进行表格操作 import requests,csv from bs4 import BeautifulSoup #———————————————————爬取电影信息———————————————————# #因为是top250的电影,而一页只能显示25条电影信息,所有一共有10页,定义一个开始的电影序号 #每增加一页,序号就加25 movie_num = 0 #用于存放电影信息的列表 movies = [] #所有电影 movie_names = [] #名称 movie_sequs = [] #序号 movie_stars = [] #评分 movie_recomms = [] #推荐语 movie_hrefs = [] #链接 #为躲避反爬虫机制,伪装成网页请求,一般通用 headers={ 'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US)AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20', 'Host':'movie.douban.com' } while movie_num <= 225: #url = 'https://movie.douban.com/top250?start=0&filter=',电影分页的url url = 'https://movie.douban.com/top250?start={}&filter='.format(movie_num) #requests.get()返回一个Response实例 get_pages = requests.get(url,headers = headers) #判断响应状态码 if get_pages.status_code == 200: #页面解析,返回的是bs对象 soup = BeautifulSoup(get_pages.text,'html.parser') #通过class_ = 'info',爬取最小共同父级标签
movieslist = soup.find_all('div',class_ = 'item') #爬取序号,名称,链接,推荐语,评分,并添加至相应的列表中 for items in movieslist: movie_sequs.append(items.find('em').text) movie_names.append(items.find('span',class_ = 'title').text) movie_hrefs.append(items.find('a').get('href')) #一些电影并没有推荐语,当发生这种情况时,就执行except后面的语句 try: movie_recomms.append(items.find('span',class_ = 'inq').text) #如何判断是AttributeError异常?先让程序运行一次,在出错时控制台会提示出现的是什么类型的异常,并指明异常位置。 except AttributeError: #如果没有推荐语(此时相应的标签内容为空),则用一些字符串代替 #如果不这样做,可能运行的时候会发生IndexError: list index out of range错误 #因为None无法添加到列表中 if type(items.find('span',class_ = 'inq') == 'None'): movie_recomms.append('------无推荐语------') movie_stars.append(items.find('span',class_ = 'rating_num').text) #将以上电影信息整合到一个列表中,且列表的每一个元素都包含一个电影的5个信息('序号','电影名称','链接','推荐语','评分') for i in range(movie_num,len(movie_sequs)): #注意:不能用赋值语句,否则会报错IndexError: list assignment index out of range #因为movies = []在定义时是一个空列表,只能通过往里追加元素 #如果想要使用赋值语句,可在开始时定义movies = [None] * 250,可以使用以下语句: #moveis[i] = [movie_sequs[i],movie_names[i],movie_hrefs[i],movie_recomms[i],movie_stars[i]] #将一个电影的5条信息放入一个列表中,并作为一个子列表(元素)添加到movies列表中去 movies.append([movie_sequs[i],movie_names[i],movie_hrefs[i],movie_recomms[i],movie_stars[i]]) #print('{}-{},{},{} 评分 {}'.format(movie_sequs[i],movie_names[i],movie_hrefs[i],movie_recomms[i],movie_stars[i])) else: print('状态码是{},访问不成功!'.format(get_pages.status_code)) #movie_num更新以便下一进入到下一页 movie_num += 25 #可以打印一下验证一下结果 print(movies) #———————————————————创建表格并将表头和电影信息写入表格中———————————————————# #表格的标题 headersOfExcel = ['序号','电影名称','链接','推荐语','评分'] #调用open()函数打开csv文件,传入参数:文件名“moveis_csv.csv”、追加模式“a”、newline=''。 with open('moveis_csv.csv','a',newline = '') as movCsv: # 用csv.writer()函数创建一个writer对象。 write_movies = csv.writer(movCsv,dialect = 'excel') #用writerow()函数将表头写进csv文件里 write_movies.writerow(headersOfExcel) #注意: #如果出现了PermissionError: [Errno 13] Permission denied: 'moveis_csv.csv'的报错, #可能是由于以下原因: #1.你有可能已经打开了这个文件,关闭这个文件即可 #2.open 打开一个文件夹(目录),而不是文件 #将电影信息逐行写入excle表格中 for movs in movies: write_movies.writerow(movs)

以下是打印的部分结果:

1)HTML页面:

Python练习之爬取豆瓣电影TOP250_第1张图片

先把这个页面打印出来,在旁边作参考,就可以很方便地知道应该选取哪些标签了。也不用来回来地翻看网页了。

2)先解决好第1页的问题:

1-肖申克的救赎,https://movie.douban.com/subject/1292052/,希望让人自由。 评分 9.7
2-霸王别姬,https://movie.douban.com/subject/1291546/,风华绝代。 评分 9.6
3-阿甘正传,https://movie.douban.com/subject/1292720/,一部美国近现代史。 评分 9.5
4-这个杀手不太冷,https://movie.douban.com/subject/1295644/,怪蜀黍和小萝莉不得不说的故事。 评分 9.4
5-美丽人生,https://movie.douban.com/subject/1292063/,最美的谎言。 评分 9.5
6-泰坦尼克号,https://movie.douban.com/subject/1292722/,失去的才是永恒的。  评分 9.4
7-千与千寻,https://movie.douban.com/subject/1291561/,最好的宫崎骏,最好的久石让。  评分 9.4
8-辛德勒的名单,https://movie.douban.com/subject/1295124/,拯救一个人,就是拯救整个世界。 评分 9.5
9-盗梦空间,https://movie.douban.com/subject/3541415/,诺兰给了我们一场无法盗取的梦。 评分 9.3
10-忠犬八公的故事,https://movie.douban.com/subject/3011091/,永远都不能忘记你所爱的人。 评分 9.4
11-海上钢琴师,https://movie.douban.com/subject/1292001/,每个人都要走一条自己坚定了的路,就算是粉身碎骨。  评分 9.3
12-楚门的世界,https://movie.douban.com/subject/1292064/,如果再也不能见到你,祝你早安,午安,晚安。 评分 9.3
13-三傻大闹宝莱坞,https://movie.douban.com/subject/3793023/,英俊版憨豆,高情商版谢耳朵。 评分 9.2
14-机器人总动员,https://movie.douban.com/subject/2131459/,小瓦力,大人生。 评分 9.3
15-放牛班的春天,https://movie.douban.com/subject/1291549/,天籁一般的童声,是最接近上帝的存在。  评分 9.3
16-星际穿越,https://movie.douban.com/subject/1889243/,爱是一种力量,让我们超越时空感知它的存在。 评分 9.3
17-大话西游之大圣娶亲,https://movie.douban.com/subject/1292213/,一生所爱。 评分 9.2
18-熔炉,https://movie.douban.com/subject/5912992/,我们一路奋战不是为了改变世界,而是为了不让世界改变我们。 评分 9.3
19-疯狂动物城,https://movie.douban.com/subject/25662329/,迪士尼给我们营造的乌托邦就是这样,永远善良勇敢,永远出乎意料。 评分 9.2
20-无间道,https://movie.douban.com/subject/1307914/,香港电影史上永不过时的杰作。 评分 9.2
21-龙猫,https://movie.douban.com/subject/1291560/,人人心中都有个龙猫,童年就永远不会消失。 评分 9.2
22-教父,https://movie.douban.com/subject/1291841/,千万不要记恨你的对手,这样会让你失去理智。 评分 9.3
23-当幸福来敲门,https://movie.douban.com/subject/1849031/,平民励志片。  评分 9.1
24-怦然心动,https://movie.douban.com/subject/3319755/,真正的幸福是来自内心深处。 评分 9.1
25-触不可及,https://movie.douban.com/subject/6786002/,满满温情的高雅喜剧。 评分 9.2

3)再添加一个循环,解决10页的问题,并将将结果放入一个表格中。在这个过程中要不断的调试,直到最后程序可以运行。以下是部分结果:

Python练习之爬取豆瓣电影TOP250_第2张图片

Python练习之爬取豆瓣电影TOP250_第3张图片

 

 

你可能感兴趣的:(小项目练习)