分享好友 最新动态首页 最新动态分类 切换频道
Python爬虫实战入门:豆瓣电影Top250(保你会,不会来打我)
2024-12-26 07:00

目标网站: https://movie.douban.com/top250

需求: 爬取电影中文名、英文名、电影详情页链接、导演、主演、上映年份、国籍、类型、评分、评分人数, 并保存到csv文件当中
目标url: https://movie.douban.com/top250


requests
lxml
安装

requests安装命令pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
lxml安装命令pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lxml

requests模块

  • requests 是 Python 编程语言中一个常用的第三方库,它可以帮助我们向 HTTP 服务器发送各种类型的请求,并处理响应。
  • 向 Web 服务器发送 GET、POST 等请求方法
  • 在请求中添加自定义标头(headers)、URL 参数、请求体等
  • 自动处理 cookies
  • 返回响应内容,并对其进行解码
  • 处理重定向和跳转等操作
  • 检查响应状态码以及请求所消耗的时间等信息。


lxml模块


了解 lxml模块和xpath语法
lxml 是 Python 编程语言中一个常用的第三方库,它提供了一个高效而简单的方式来解析和处理 XML 和 HTML 文档。

  • 从文件或字符串中读取 XML 或 HTML 文档
  • 使用 XPath 或 CSS 选择器来查找和提取文档中的数据
  • 解析 XML 或 HTML 文档,并将其转换为 Python 对象或字符串
  • 对文档进行修改、重构或序列化
  • 处理命名空间和 CDATA 等特殊情况。


xpath语法-基础节点选择语法

  1. XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。
  2. 这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。
  3. 使用chrome插件选择标签时候,选中时,选中的标签会添加属性class=“xh-highlight”

xpath定位节点以及提取属性或文本内容的语法

表达式描述text()   选取文本。nodename 选中该元素。/   从根节点选取、或者是元素和元素间的过渡。// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。.  选取当前节点。… 选取当前节点的父节点。@ 选取属性。

xpath语法-节点修饰语法

可以根据标签的属性值、下标等来获取特定的节点

节点修饰语法

路径表达式结果//title[@lang=“eng”] 选择lang属性值为eng的所有title元素。/bookstore/book[1]  选取属于 bookstore 子元素的第一个 book 元素。/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。/bookstore/book[position()>1]选择bookstore下面的book元素,从第二个开始选择。//book/title[text()=‘Harry Potter’]选择所有book下的title元素,仅仅选择文本为Harry Potter的title元素。/bookstore/book[price>35.00]/title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

    
   
 
    
    
    
    
    
关于xpath的下标

  • 在xpath中,第一个元素的位置是1
  • 最后一个元素的位置是last()
  • 倒数第二个是last()-1

xpath语法-其他常用节点选择语法

// 的用途

  • //a 当前html页面上的所有的a
  • bookstore//book bookstore下的所有的book元素

@ 的使用

  • //a/@href 所有的a的href
  • //title[@lang=“eng”] 选择lang=eng的title标签

text() 的使用

  • //a/text() 获取所有的a下的文本
  • //a[texts()=‘下一页’] 获取文本为下一页的a标签
  • a//text() a下的所有的文本

xpath查找特定的节点

  • //a[1] 选择第一个s
  • //a[last()] 最后一个
  • //a[position()<4] 前三个

包含

  • //a[contains(text(),“下一页”)]选择文本包含下一页三个字的a标签**
  • //a[contains(@class,‘n’)] class包含n的a标签


实战教程
打开网站

https://movie.douban.com/top250

 

我们打印之后发现并没有输出任何内容,这是因为对于爬虫来说,有时候网站可能会采取一些反爬虫措施,以防止爬虫程序过度访问网站或者获取网站数据。那么为了避免反爬,我们需要设置合适的请求头信息来模拟真实浏览器行为,设置合适的 User-Agent 和其他请求头信息,使请求看起来更像是来自正常的浏览器访问。

 

注意:这里的请求头信息要以字典的格式写入

接下来就是进行数据提取,也就需要我们导入lxml模块。

lxml模块的使用

  • 导入lxml 的 etree 库
 
 
  • 利用etree.HTML,将html字符串(bytes类型或str类型)转化为Element对象,Element对象具有xpath的方法,返回结果的列表
 


xpath方法返回列表的三种情况

  • 返回空列表:根据xpath语法规则字符串,没有定位到任何元素
  • 返回由字符串构成的列表:xpath字符串规则匹配的一定是文本内容或某属性的值
  • 返回由Element对象构成的列表:xpath规则字符串匹配的是标签,列表中的Element对象可以继续进行xpath
 
 

前面我们已经找到了<div class="info">这个标签,返回的数据类型是一个列表,循环遍历这个列表里的元素,那么我们接下来找标签元素就可以直接以<div class="info">为父节点来查找他的子孙级标签。

这里就以电影中文名为例<div class="info">的下一级标签是<div class="hd">在下一级就是一个a标签,然后就是电影中文名所在的<span class="title">标签。

 


xpath里面的 https://blog.csdn.net/m0_74194018/article/details/ 代表当前节点,也就是<div class="info">标签;最后的text()是获取标签里的文本内容。这里用break终止循环,我们只要查看一下打印的数据正不正确就行了。

返回的数据类型还是列表,可以看到:电影中文名就是列表的第一个元素,外文名就是第二个元素,直接利用索引取值就行了。
另外我们可以看到外文名有一些xa0/xa0这样的符号, xa0  是一个 Unicode 字符,表示非断行空格。我们利用索引取值之后可以用字符串中的strip函数将它给去除。

 

这样就获得了中文名和外文名。

电影详情页链接也可以用上面类似的方法获取。

 


但这里有一点需要注意,我们这里不是要获取a标签里的文本内容,而是要获取a标签里的href属性值。xpath中可以用@获取标签里面的属性值。

可以看到导演、主演、上映年份、国籍和电影类型其实都在一个p标签里面,那么我们只要获取到这个p标签,然后利用索引取值就行了。

 
 
 


最后的评分和评分人数所在同一级的不同span标签里面,而且它们还具有同一个父级标签<div class="star">,这里我们只要注意在取span标签时,它的索引是从1开始的,而不是从0开始。

到这里我们都是爬取一页的电影数据,并没有进行翻页处理,那怎么进行翻页处理呢
我们可以点击其他页数,查看一下其url的变化

 

我们可以发现它的start的参数随着翻页是发生变化的,变化规律类似与一个表达式:(页数 - 1) * 25。

 

现在我们所有的数据都爬完了,现在就要进行数据保存了,这里我们是要保存到csv文件中,就要借助于csv这个内置模块。

将数据写入到csv文件中需要以特定的格式写入,一种是列表嵌套元组,一种是列表嵌套字典。这里我们使用列表嵌套字典的方式写入。别问,问就是习惯了
应为字典里面要有所有电影的数据信息,为了方便,我们直接在循环内部定义一个字典,每一部电影的数据都放在一个字典中。而所有的字典都在一个列表当中,所以我们直接将列表定义在循环外面就行了。


最新文章
5分钟快速掌握!KIMI在线PPT神器,一键生成专业演示文稿
要使用Kimi在线生成PPT文档,你可以按照以下步骤操作: 进入PPT助手:你可以通过点击Kimi首页左侧边栏的“Kimi+”,然后选择“PPT助手”,或者直接在Kimi的会话聊天中通过@PPT助手来唤起PPT助手功能
2024最新(深业颐樾府)官方售楼中心-官方网站欢迎您-深圳房天下
——龙华红山——【深业颐樾府】————线上预约看房【享】专属优惠折扣在售户型图丨项目介绍丨最新房源丨周边配套丨详细解答〢深业颐樾府售楼处24小时VIP电话:400-859-7606温馨提示:来电预约看房、尊享更多现场优惠!(中介勿扰)深业颐
2024年腾讯云双十二大促快结束了,云服务器+云数据库一站式解决方案
​​2024年腾讯云双十二大促快结束了,云服务器+云数据库一站式解决方案特惠!大促最后几天,都知道云产品每年都涨价,错过优惠不再有!腾讯云有优惠活动吗?2024年末腾讯云双十二大促活动,云服务器价格多少钱?2024年腾讯云12月轻量服务
A股华为概念股,华为概念上市公司一览表(6/6)
  截至6月6日,A股涉及华为概念的上市公司具体分布情况为:主板的有151家、中小板的有151家、创业板的有208家、科创板的有40家。趋势选股系统为您整理了归属于华为概念,并且在A股上市的公司。  6月6日华为概念股票领涨股为:宏和科技
AI绘制美女写真:深入评测与使用指南,快来生成你的AI女友!
DeepArt:这款工具以其先进的神经网络技术而闻名,特别是在将图片转化为艺术风格作品上表现突出。用户只需上传基础照片,选择一种艺术风格,工具便会自动生成一幅独特的艺术作品。但需要留意的是,生成的效果可能需要时间,并且部分高级功
ai智能产品设计,ai智能产品方面
1、十大设计AI排行榜2、智能科技产品设计3、ai设计是什么4、如果让你设计人工智能产品,你会设计什么?为什么?5、什么是AI设计?6、AI设计是什么1、十大设计AI排行榜Midjourney Midjourney是一个AI图像生成工具ai智能产品设计,通过文本描述生
CentOS安装Webmin/WebAdmin管理工具
Webmin是非常强大的linux管理工具,打算在centos 6.5 -i686下面安装体验一下。 Step1:下载安装包: wget http://prdownloads.sourceforge.net/webadmin/webmin-1.530-1.noarch.rpm Step2:安装webadmin rpm -U we
jocy.tw囧次元官方下载2025最新免费版
jocytw囧次元(com.viva.note)是一款免费追番类动漫播放器软件,软件中你可以解锁各种不同的动漫资源来进行观看,超多不同的播放器功能和大量的追番内容等你来解锁体验哦,保证让你可以一次性看个爽,更多不同的大屏观影功能不会让你失望
2o2o年香港最谁最快网站资料,精细化方案决策_精致生活版61.764
  在数字化时代,信息的迅速传播和获取变得尤为重要。对于追求效率和品质生活的香港居民来说,了解哪些网站能够提供最快、最精细化的决策支持,无疑是提高生活质量的关键。本文将以数据和分析为基础,探讨2020年香港最快网站资料的细致方
2024年智能语音识别技术研发与转让合同
甲方:XXX乙方:XXX20XXCOUNTRACTCOVER专业合同封面RESUME甲方:XXX乙方:XXX20XXCOUNTRACTCOVER专业合同封面RESUMEPERSONAL
相关文章
推荐文章
发表评论
0评