当前位置: 首页 > news >正文

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

相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价。豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是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 的图片,最近感觉营养有点跟不上)

相关文章:

  • 携程小程序初体验
  • java虚拟机之垃圾回收算法
  • 10分钟了解JS堆、栈以及事件循环的概念
  • 常见面试题—css实现垂直水平居中
  • hyperLedger fabric 从0到1 + End2EndIT源码解析
  • 天猫校园店一个月签约100家高校!未来要服务2000万高校人群
  • T-SQL 簡易小數處理
  • 基于 CentOS 搭建 WordPress 个人博客
  • eclipse部署jrebel热启动后报错java.lang.OutOfMemoryError: PermGen space问题
  • Powershell渗透测试系列–进阶篇
  • 【leetcode】802. Find Eventual Safe States
  • 架构的代码结构
  • 做RAID1 遇到种种问题
  • jira安装
  • 对指定多个目录的第一级保留进行保留(再递归删除空目录)
  • [LeetCode] Wiggle Sort
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Bytom交易说明(账户管理模式)
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • Facebook AccountKit 接入的坑点
  • Java方法详解
  • JS函数式编程 数组部分风格 ES6版
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mybatis初体验
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • Python进阶细节
  • React-flux杂记
  • Redis中的lru算法实现
  • scala基础语法(二)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Twitter赢在开放,三年创造奇迹
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 解析 Webpack中import、require、按需加载的执行过程
  • 入口文件开始,分析Vue源码实现
  • 一些css基础学习笔记
  • 用jQuery怎么做到前后端分离
  • 湖北分布式智能数据采集方法有哪些?
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • # include “ “ 和 # include < >两者的区别
  • # Java NIO(一)FileChannel
  • # 飞书APP集成平台-数字化落地
  • $.ajax()参数及用法
  • $.ajax中的eval及dataType
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (2022 CVPR) Unbiased Teacher v2
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (一)插入排序
  • (转) RFS+AutoItLibrary测试web对话框
  • .Net 8.0 新的变化
  • .Net Web项目创建比较不错的参考文章
  • .NET 分布式技术比较
  • .net 后台导出excel ,word