爬虫入门经典(四) | 如何爬取豆瓣电影Top250

不温卜火 等级 782 0 0
标签: httpscsdnPython

  大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行更新,博客主页:https://buwenbuhuo.blog.csdn.net/爬虫入门经典(四) | 如何爬取豆瓣电影Top250

PS:由于现在越来越多的人未经本人同意直接爬取博主本人文章,博主在此特别声明:未经本人允许,禁止转载!!!

目录


爬虫入门经典(四) | 如何爬取豆瓣电影Top250


推荐

爬虫入门经典(四) | 如何爬取豆瓣电影Top250
  ♥各位如果想要交流的话,可以加下QQ交流群:974178910,里面有各种你想要的学习资料。♥

  ♥欢迎大家关注公众号【不温卜火】,关注公众号即可以提前阅读又可以获取各种干货哦,同时公众号每满1024及1024倍数则会抽奖赠送机械键盘一份+IT书籍1份哟~♥
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
  博主早期其实写过一篇爬取豆瓣电影Top250的博文,当时由于刚开始学习,使用了urllib库进行爬取。现在看来,显的过于臃余。因此本片博文,博主带来了较为简洁的写法。使用xpath进行解,不得不说真香!!!
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
  如果想看博主刚开始写的粗劣写法,博主在此给出传送门:爬取豆瓣电影详细数据,保存为CSV文件

🆗,话不多说。进入正题。

一、项目分析

1.1 单页分析

目标网站:https://movie.douban.com/top250
爬虫入门经典(四) | 如何爬取豆瓣电影Top250

我们打开网址,查看页面布局,可以看到有电影名称及别名、评分、引言等等,在此就以电影名称及别名、评分、引言为爬取目标。

我们打开开发者选项,发现这个网页为静态网页,这样就很好爬取了:
爬虫入门经典(四) | 如何爬取豆瓣电影Top250

爬取部分所在位置
爬虫入门经典(四) | 如何爬取豆瓣电影Top250

1、电影名称与其他名称
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
2、 URL
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
3、 评分
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
4、 引言
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
这个时候,你是否会感觉无从下手。没关系,本大师会为你排忧解惑!
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
网页大体结构已经分析完成,那么接下来就需要对我们所要爬取的内容进行xpath解析:

1、 电影名称解析
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
2、 其他名称解析
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
3、 链接解析
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
通过查看我们发现得到的是这一页中的所有链接,我们选取第一个即:

(//div[@class="hd"]/a/@href)[0] 

这样就可以达到对应的URL链接了。

4、 评分解析
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
我们可以看到评分和链接一样,都是选取第一个即可:

(//div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text())[0] 

5、 引言解析
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
引言解析和上述两个看着一样,但是如果直接和上面以上是会报错的,因为引言可能有的是没有的,比如说排名212的《九品芝麻官》,就没有引言。
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
这个时候就需要加上判断语句:

# 条件语句:如果有引言则写引言,若没有则不写
if quote:
    quote = quote[0]
else:
    quote = '' 

1.2 翻页分析

在分析完单页爬取内容后,我们就需要继续分析分页,来完成循环爬取的功能。
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
我们先来分析下网页链接:

https://movie.douban.com/top250?start=0&filter=
https://movie.douban.com/top250?start=25&filter=
https://movie.douban.com/top250?start=50&filter= 

通过查看对比,我们发现其网页变化仅为start=?以此可以判定,其是以25为分页。

我们再来看下总页数,这印证了我们的猜想是正确的。
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
分析完成了下面就可以来进行实现了:

doubanUrl = 'https://movie.douban.com/top250?start={}&filter='

# 一共10页,循环10次
for i in range(10):
    # 获取url
    pageLink = doubanUrl.format(i * 25)
    print(pageLink) 

下面我们来打印下拼接网址
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
打开其中一个网址,看是否成功
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
Respect,🆗分析到这里就完美结束了!

爬虫入门经典(四) | 如何爬取豆瓣电影Top250

二、完整代码

# encoding: utf-8
'''
  @author 李华鑫
  @create 2020-10-14 8:30
  Mycsdn:https://buwenbuhuo.blog.csdn.net/
  @contact: 459804692@qq.com
  @software: Pycharm
  @file: 豆瓣.py
  @Version:1.0

'''
import requests
from lxml import etree
import csv

# 豆瓣top250网址
doubanUrl = 'https://movie.douban.com/top250?start={}&filter='

# 获取网页源码
def getSource(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'
    }
    response = requests.get(url, headers=headers)
    # 以防出现乱码 设置编码格式
    response.encoding = 'utf-8'
    return response.text

# 引言 评分 网址 标题 ---> 网页源代码中
# 获取电影信息
def getEveryItem(source):
    # 生成一个Html对象
    selector = etree.HTML(source)
    # 通过selector对象来找到  电影信息
    movieItemList = selector.xpath('//div[@class="info"]')

    # 定义一个空列表
    movieList = []

    # 通过for循环来遍历
    for eachMovie in movieItemList:
        # 创建一个字典,向列表中存储数据[{电影一},{电影二}...]
        movieDict = {}

        title = eachMovie.xpath('div[@class="hd"]/a/span[@class="title"]/text()') # 电影名
        otherTitle = eachMovie.xpath('div[@class="hd"]/a/span[@class="other"]/text()')  # 其他名称
        link = eachMovie.xpath('div[@class="hd"]/a/@href')[0]  # 链接
        star = eachMovie.xpath('div[@class="bd"]/div[@class="star"]/span[@class="rating_num"]/text()')[0]  # 评分
        quote = eachMovie.xpath('div[@class="bd"]/p[@class="quote"]/span/text()')  # 引言

        # 条件语句:如果有引言则写引言,若没有则不写
        if quote:
            quote = quote[0]
        else:
            quote = ''

        # 保存数据
        movieDict['title'] = ''.join(title + otherTitle)
        movieDict['url'] = link
        movieDict['star'] = star
        movieDict['quote'] = quote
        print(movieDict)

        movieList.append(movieDict)

    return movieList

# 保存数据
def writeData(movieList):
    with open('douban_top250.csv', 'w', encoding='utf-8',newline='') as f:
        writer = csv.DictWriter(f, fieldnames=['title', 'star', 'quote', 'url'])
        writer.writeheader()  # 写入表头
        for each in movieList:
            # 逐行写入
            writer.writerow(each)

# 启动
if __name__ == "__main__":
    movieList = []

    # 一共10页,循环10次
    for i in range(10):
        # 获取url
        pageLink = doubanUrl.format(i * 25)
        print(pageLink)
        source = getSource(pageLink)
        movieList += getEveryItem(source)

    writeData(movieList) 

三、运行结果

爬虫入门经典(四) | 如何爬取豆瓣电影Top250
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
美好的日子总是短暂的,虽然还想继续与大家畅谈,但是本篇博文到此已经结束了,如果还嫌不够过瘾,不用担心,我们下篇见!


爬虫入门经典(四) | 如何爬取豆瓣电影Top250

  好书不厌读百回,熟读课思子自知。而我想要成为全场最靓的仔,就必须坚持通过学习来获取更多知识,用知识改变命运,用博客见证成长,用行动证明我在努力。
  如果我的博客对你有帮助、如果你喜欢我的博客内容,请“点赞” “评论”“收藏”一键三连哦!听说点赞的人运气不会太差,每一天都会元气满满呦!如果实在要白嫖的话,那祝你开心每一天,欢迎常来我博客看看。
  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!

爬虫入门经典(四) | 如何爬取豆瓣电影Top250
爬虫入门经典(四) | 如何爬取豆瓣电影Top250

本文转自 https://buwenbuhuo.blog.csdn.net/article/details/109200583,如有侵权,请联系删除。

收藏
评论区

相关推荐

爬虫入门经典(四) | 如何爬取豆瓣电影Top250
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
被“词云”包围的冰冰会更好看吗?安排
(https://imghelloworld.osscnbeijing.aliyuncs.com/b299933deefc692934e8cc6141ab3894.png) 大家好,我是小五🐶 昨天「凹凸数据」发了一篇张同学投稿的文章《用Python爬取王冰冰vlog弹幕并制作词云(https://mp.weixin.qq.com/
Python网络爬虫与信息提取
title: Python网络爬虫与信息提取date: 20201210 01:00:23tags: Pythoncategories: 学习笔记 写在前面 不知道写啥其实说实话[TOC] 网络爬虫之规则 安装requests库cmd 命令行打开输入pip3 install requests,等待即可简单测试,爬一下bkjwpythonimport requ
《Python3网络爬虫开发实战》
提取码:1028内容简介 · · · · · ·本书介绍了如何利用Python 3开发网络爬虫,书中首先介绍了环境配置和基础知识,然后讨论了urllib、requests、正则表达式、Beautiful Soup、XPath、pyquery、数据存储、Ajax数据爬取等内容,接着通过多个案例介绍了不同场景下如何实现数据爬取,后介绍了pyspider框架、S
创建免费ip代理池
     反爬技术越来越成熟,为了爬取目标数据,必须对爬虫的请求进行伪装,骗过目标系统,目标系统通过判断请求的访问频次或请求参数将疑似爬虫的ip进行封禁,要求进行安全验证,通过python的第三方库faker可以随机生成header伪装请求头,并且减缓爬虫的爬取速度,能很好的避过多数目标系统的反扒机制,但对一些安全等级
3000字 “婴儿级” 爬虫图文教学 | 手把手教你用Python爬取 “实习网”!
1\. 为"你"而写 这篇文章,是专门为那些 "刚学习" Python爬虫的朋友,而专门准备的文章。希望你看过这篇文章后,能够清晰的知道整个 "爬虫流程"。从而能够 "独立自主" 的去完成,某个简单网站的数据爬取。好了,咱们就开始整个 “爬虫教学” 之旅吧!2\. 页面分析 ① 你要爬取的网站是什么?首先,我们应该清楚你要爬去的网站是什么?由于这里我们想要
Python 什么时候会被取代?
![](https://oscimg.oschina.net/oscnet/4e755c25d09a136682cfbbbd8aad8b89c4c.jpg) 编译:CSDN-弯月,作者:Rhea MoutafisPython 经过了几十年的努力才得到了编程社区的赏识。自 2010 年以来,Python 得到了蓬勃发展,并最终超越了 C、C#、Java 和
Python 使用selenium抓取网页文本和下载音频
Python 使用selenium抓取网页文本和下载音频 #!\usr\bin\env python # -*- coding: utf-8 -*- '一个自动从https://podcast.duolingo.com/spanish中下载音频并且爬取文本的程序' '需要配置下载以下所需库,并且配置好webdriv
Python3 网络爬虫:下载小说的正确姿势
点击上方“ **Python爬虫与数据挖掘** ”,进行关注 回复“**书籍**”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 少年心事当拂云。 ![](https://oscimg.oschina.net/oscnet/09902b71501b9e8c3cb656b5dfbbb0552e0.jpg) 1 **
Python3《机器学习实战》学习笔记(八):支持向量机原理篇之手撕线性SVM
转载请注明作者和出处: https://zhuanlan.zhihu.com/ml-jack 机器学习知乎专栏:https://zhuanlan.zhihu.com/ml-jack CSDN博客专栏:http://blog.csdn.net/column/details/16415.html Github代码获取:https://github.c
Python基础练习(一)中国大学定向排名爬取
说好的要从练习中学习爬虫的基础操作,所以就先从容易爬取的静态网页开始吧! 今天要爬取的是最好大学网上的2018年中国大学排名。我个人认为这个是刚接触爬虫时用来练习的一个很不错的网页了。 在说这个练习之前,给新着手学习爬虫的同学提供一个中国MOOC上北京理工大学嵩天老师的视频, [Python网络爬虫与信息提取](https://www.oschina.n
Python爬取暴走漫画动态图
最近再之乎上看到比较好的Python爬虫教程,看过之后对爬虫有了大概的了解,随后自己写了个爬取[暴走漫画](https://www.oschina.net/action/GoToLink?url=http%3A%2F%2Fbaozoumanhua.com%2Fcatalogs%2Fgif)动图的爬虫练练手,另外附上[Python爬虫教程](https://w
Python爬取网易云歌单
#### 基本配置: * Python版本:3.7 #### 相关模块: from urllib import parsefrom lxml import etreefrom urllib3 import disable_warningsimport requests #### 案例关键点: 使用单线程爬取,未登录,爬取网易云
Python爬取网易云音乐辑的图片、专辑名和专辑出版时间
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 作者:阿里波特 来源:CSDN **Python爬虫、数据分析、网站开发等案例教程视频免费在线观看** https://space.bilibili.com/523606542 ![](https://oscimg.oschina.net/
Python爬虫
Python爬虫-xpath ============== * Python爬虫-xpath * 说明 * 再说明 * 插件推荐 * 语法讲述 * 举栗子 * 代码里使用 * 实战句子迷 * 需要的总结: 说明 -- 关于Python爬虫请求数据方面的知