博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python爬虫——爬取豆瓣TOP250电影
阅读量:7229 次
发布时间:2019-06-29

本文共 3154 字,大约阅读时间需要 10 分钟。

相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价。豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看。

爬取目标

本文将爬取豆瓣电影 TOP250 排行榜的电影名称、时间、主演和评分等信息,爬去的结果我们将以 excel 格式存储下来。

爬取分析

打开豆瓣电影 TOP250 我们会发现榜单主要显示电影名、主演、上映时间和评分。

python爬虫——爬取豆瓣TOP250电影

python爬虫——爬取豆瓣TOP250电影

通过对网页源码的分析我们发现电影的标题在 <div class=hd'>...</div> 标签中,主演和上映时间信息在 <div class=hd'>...</div> 中,电影评分在 <div class=star'>...</div> 中。所以我们调用 find_all方法,即可获得所有信息。

提取首页信息

def find_movies(res):  soup = bs4.BeautifulSoup(res.text, 'html.parser')  # 电影名  movies = []  targets = soup.find_all("div", class_="hd")  for each in targets:  movies.append(each.a.span.text)  # 评分  ranks = []  targets = soup.find_all("span", class_="rating_num")  for each in targets:  ranks.append(each.text)  # 资料  messages = []  targets = soup.find_all("div", class_="bd")  for each in targets:  try:  messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip())  except:  continue  result = []  length = len(movies)  for i in range(length):  result.append([movies[i], ranks[i], messages[i]])  return result

分页爬取

我们需要爬去的数据是 TOP100 的电影,所以我们需要获取他所有页面的数据

def find_depth(res):  soup = bs4.BeautifulSoup(res.text, 'html.parser')  depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text  return int(depth)

写入文件

def save_to_excel(result):  wb = openpyxl.Workbook()  ws = wb.active  ws['A1'] = "电影名称"  ws['B1'] = "评分"  ws['C1'] = "资料"  for each in result:  ws.append(each)  wb.save("豆瓣TOP250电影.xlsx")

整理代码

import requests import bs4 import openpyxl def open_url(url):  # 使用代理  # proxies = {"http": "127.0.0.1:1080", "https": "127.0.0.1:1080"}  headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36'} # res = requests.get(url, headers=headers, proxies=proxies) res = requests.get(url, headers=headers) return res def find_movies(res): soup = bs4.BeautifulSoup(res.text, 'html.parser') # 电影名 movies = [] targets = soup.find_all("div", class_="hd") for each in targets: movies.append(each.a.span.text) # 评分 ranks = [] targets = soup.find_all("span", class_="rating_num") for each in targets: ranks.append(each.text) # 资料 messages = [] targets = soup.find_all("div", class_="bd") for each in targets: try: messages.append(each.p.text.split('\n')[1].strip() + each.p.text.split('\n')[2].strip()) except: continue result = [] length = len(movies) for i in range(length): result.append([movies[i], ranks[i], messages[i]]) return result # 找出一共有多少个页面 def find_depth(res): soup = bs4.BeautifulSoup(res.text, 'html.parser') depth = soup.find('span', class_='next').previous_sibling.previous_sibling.text return int(depth) def save_to_excel(result): wb = openpyxl.Workbook() ws = wb.active ws['A1'] = "电影名称" ws['B1'] = "评分" ws['C1'] = "资料" for each in result: ws.append(each) wb.save("豆瓣TOP250电影.xlsx") def main(): host = "https://movie.douban.com/top250" res = open_url(host) depth = find_depth(res) result = [] for i in range(depth): url = host + '/?start=' + str(25 * i) res = open_url(url) result.extend(find_movies(res))

福利以及下期预告

私信回复 python 即可获得 全套 python 资料。下期我将演示如何爬取百度文库 VIP 文章以及令人喷血的性感美女图片(我已经存了几个 G 的图片,最近感觉营养有点跟不上)

转载地址:http://ardfm.baihongyu.com/

你可能感兴趣的文章
统计当前在线用户数量
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>
PHP项目记录
查看>>
.net面试题系列文章七(附答案)
查看>>
FastSocket
查看>>
ionic $ionicSlideBoxDelegate 滑动框事件
查看>>
点击文字,把input type="radio"也选中
查看>>
第一章 Java多线程技能
查看>>
Java 集合系列-第八篇-Map架构
查看>>
springmvc 3.2 @MatrixVariable bug 2
查看>>
React-Native PanResponder手势识别器
查看>>
IOS11 光标错位问题
查看>>
如何设计用户登录
查看>>
linux安装mysql5.7.19
查看>>
Zookeeper+ActiveMQ 集群实现
查看>>
加权有向图问题2----多源最短路径问题(Floyd算法)和关键路径算法
查看>>
logback logback.xml常用配置详解(三) <filter>
查看>>
KgMall B2B/B2B2c/C2C版店铺商号初始化
查看>>
Linux内核的ioctl函数学习
查看>>
Liunx Shell入门
查看>>