Python爬虫-豆瓣电影 Top 250
Posted 我来乔23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python爬虫-豆瓣电影 Top 250相关的知识,希望对你有一定的参考价值。
爬取的网页地址为:https://movie.douban.com/top250
打开网页后,可观察到:TOP250的电影被分成了10个页面来展示,每个页面有25个电影。
那么要爬取所有电影的信息,就需要知道另外9个页面的URL链接。
第一页:https://movie.douban.com/top250
第二页:https://movie.douban.com/top250?start=25&filter=
第三页:https://movie.douban.com/top250?start=50&filter=
以此类推...
分析网页源代码:以首页为例
观察后可以发现:
所有电影信息在一个ol标签之内,该标签的 class属性值为grid_view;
每个电影在一个li标签里面;
每个电影的电影名称在:第一个 class属性值为hd 的div标签 下的 第一个 class属性值为title 的span标签里;
每个电影的评分在对应li标签里的(唯一)一个 class属性值为rating_num 的span标签里;
每个电影的评价人数在 对应li标签 里的一个 class属性值为star 的div标签中 的最后一个数字;
每个电影的短评在 对应li标签 里的一个 class属性值为inq 的span标签里。
Python主要模块:requests模块 BeautifulSoup4模块
>pip install requests
>pip install BeautifulSoup4
主要代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# -*- coding:utf-8 -*-
import requests # requests模块 from bs4 import BeautifulSoup # BeautifulSoup4模块 import re # 正则表达式模块 import time # 时间模块 import sys # 系统模块 """获取html文档""" def getHTMLText(url, k): try: if(k == 0): # 首页 kw = {} else: # 其它页 kw = {\'start\':k, \'filter\':\'\'} r = requests.get(url, params = kw, headers = {\'User-Agent\': \'Mozilla/4.0\'}) r.raise_for_status() r.encoding = r.apparent_encoding return r.text except: print("Failed!") """解析数据""" def getData(html): soup = BeautifulSoup(html, "html.parser") movieList = soup.find(\'ol\', attrs = {\'class\':\'grid_view\'}) # 找到第一个class属性值为grid_view的ol标签 moveInfo = [] for movieLi in movieList.find_all(\'li\'): # 找到所有li标签 data = [] # 得到电影名字 movieHd = movieLi.find(\'div\', attrs = {\'class\':\'hd\'}) # 找到第一个class属性值为hd的div标签 movieName = movieHd.find(\'span\', attrs = {\'class\':\'title\'}).getText() # 找到第一个class属性值为title的span标签 # 也可使用.string方法 data.append(movieName) # 得到电影的评分 movieScore = movieLi.find(\'span\', attrs={\'class\':\'rating_num\'}).getText() data.append(movieScore) # 得到电影的评价人数 movieEval=movieLi.find(\'div\',attrs={\'class\':\'star\'}) movieEvalNum=re.findall(r\'\\d+\',str(movieEval))[-1] data.append(movieEvalNum) # 得到电影的短评 movieQuote = movieLi.find(\'span\', attrs={\'class\': \'inq\'}) if(movieQuote): data.append(movieQuote.getText()) else: data.append("无") print(outputMode.format(data[0], data[1], data[2], data[3], chr(12288))) # 将输出重定向到txt文件 output = sys.stdout outputfile = open("moviedata.txt", \'w\', encoding = \'utf-8\') sys.stdout = outputfile outputMode = "{0:{4}^20}\\t{1:^10}\\t{2:^10}\\t{3:{4}<10}" print(outputMode.format(\'电影名称\', \'评分\', \'评论人数\', \'短评\', chr(12288))) basicUrl = \'https://movie.douban.com/top250\' k = 0 while k <= 225: html = getHTMLText(basicUrl, k) time.sleep(2) k += 25 getData(html) outputfile.close() sys.stdout = output |
以上是关于Python爬虫-豆瓣电影 Top 250的主要内容,如果未能解决你的问题,请参考以下文章