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

不温卜火 等级 447 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,如有侵权,请联系删除。

收藏
评论区

相关推荐

一个爬虫的故事:这是人干的事儿?
本文转载自 轩辕之风的文章,链接 https://mp.weixin.qq.com/s/YygbUWpa2mbPZPuPNhdt2w 爬虫原理 我是一个爬虫,每天穿行于互联网之上,爬取我需要的一切。 image.png(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/656d
爬虫入门经典(四) | 如何爬取豆瓣电影Top250
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
爬虫入门经典(九) | 简单一文教你如何爬取扇贝单词
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
爬虫入门经典(十一) | 一文带你爬取传统古诗词(超级简单!)
大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语—不温不火,本意是希望自己性情温和。作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望能够帮助到很多和自己一样处于起步阶段的萌新。但由于水平有限,博客中难免会有一些错误出现,有纰漏之处恳请各位大佬不吝赐教!暂时只在csdn这一个平台进行
python算法
640?wx_fmtjpeg(https://imghelloworld.osscnbeijing.aliyuncs.com/c8238ed70f9664b61ce91f80786ca26f.png) 来源 | CSDN(ID:CSDNnews ) 本文是一些机器人算法(特别是自动导航算法)的Python代码合集。 其主要特点有以下
被“词云”包围的冰冰会更好看吗?安排
(https://imghelloworld.osscnbeijing.aliyuncs.com/b299933deefc692934e8cc6141ab3894.png) 大家好,我是小五🐶 昨天「凹凸数据」发了一篇张同学投稿的文章《用Python爬取王冰冰vlog弹幕并制作词云(https://mp.weixin.qq.com/
商业数据分析从入门到入职(9)Python网络数据获取
@toc 前言本文主要讲Python最常见的应用之一——网络数据获取,即爬虫:先介绍了网页和网络的基础知识,为从网页中获取数据打好基础;接下来以两个案例介绍从网络中获取数据和处理数据的不同方式,以进一步认识Python爬虫和数据处理。 一、网络和网页基础知识 1.数据来源数据源有很多,可以从数据库中获取,可以从文件中获取,也可以从
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\. 页面分析 ① 你要爬取的网站是什么?首先,我们应该清楚你要爬去的网站是什么?由于这里我们想要
手把手教你使用XPath爬取免费代理IP
大家好,我是霖hero。前言 可能有人说,初学者Python爬虫爬数据太难啦,构造正则表达式的时候,太烦琐了,眼睛都看花了,而且前一秒还可以愉快地爬取,下一秒IP就被封了,这还爬个屁啊,不爬了。哎,不要着急,这篇文章我们教你如何使用XPath来爬取快代理中的免费代理IP,告别眼花,告别IP被封的烦恼。XPath首先我们来简单了解一下XPath,想要了解更多
实战|手把手教你用Python爬取存储数据,还能自动在Excel中可视化!
大家好,在之前我们讲过如何用Python构建一个带有GUI的爬虫小程序,很多本文将迎合热点,延续上次的NBA爬虫GUI,探讨如何爬取虎扑NBA官网数据。 并且将数据写入Excel中同时自动生成折线图,主要有以下几个步骤。本文将分为以下两个部分进行讲解 在虎扑NBA官网球员页面中进行爬虫,获取球员数据。 清洗整理爬取的球员数据,对其进行可视化。
手把手教你用Pycharm连接远程Python环境
前言本次咱们来操作一下如何在Pycharm上,使用远程服务器上的Python环境。 为什么这样做?这个要从我的一次经历说起,有一次我帮朋友爬取一些东西,由于类别不同,分了几次爬取,这一次我写好规则之后,依然正常爬取,由于我本人比较善良,加上数据量目测并不是太多,并没有使用代理ip,并且将scpay的速度控制的比较慢,一般爬取时,一般也就几分钟而已,泡一杯咖
一篇文章教会你利用Python网络爬虫抓取百度贴吧评论区图片和视频
【一、项目背景】    百度贴吧是全球最大的中文交流平台,你是否跟我一样,有时候看到评论区的图片想下载呢?或者看到一段视频想进行下载呢? 今天,小编带大家通过搜索关键字来获取评论区的图片和视频。 【二、项目目标】    实现把贴吧获取的图片或视频保存在一个文件。 【三、涉及的库和网站】1、网址如下:https://tieba.baidu.com/f?ie