Python爬虫案例与实战:爬取豆瓣电影简介

Python爬虫案例与实战:爬取豆瓣电影简介

本章案例将介绍如何爬取豆瓣电影简介,以此帮助读者学习如何通过编写爬虫程序来批量地从互联网中获取信息。本案例中将借助两个第三方库----Requests库和 BeautifulSoup库。通过Requests库获取相关的网页信息,通过 BeautifulSoup库解析大体框架信息的内容,并且将局部信息中最关键的内容提取出来。通过使用第三方库,读者可以实现定向网络爬取和网页解析的基本目标。

3.1确定信息源

首先,需要明确要爬取哪些内容,并精确到需要爬取的网页。在本章中需要爬取电影的简介,因此选择信息较为全面的豆瓣电影。
进入“豆瓣电影”首页,如图3-1所示,可以看到各种推荐的电影。选择其中任意一部电影,进入电影简介页面,如图3-2所示。可以发现每部电影的简介页面都具有相似的结构,这为编写爬虫程序提供了极大的方便。这意味着只需要以某部电影的电影简介页面为模板编写爬虫程序,此后便可以运用到豆瓣网站中其他所有电影简介的页面。
在这里插入图片描述
在这里插入图片描述

3.2获取网页信息

确定了需要爬取的网页后,需要如何获取这些信息呢?要知道网页是一个包含HTML标签的纯文本文件。可以通过使用 Requests库的request()方法向指定网址发送请求获得的文本文件。注意,在使用 Python第三方库前需要在本机上安装第三方库,可以使用pip方式或者其他方式安装。

1.Requests库的两个主要方法

下面先来简单介绍本实验需要用到的 Requests库的两个主要方法。
(1)requests.request()方法。该方法的作用是构造一个请求,是支持其他方法的基础方法。
(2)requests.get()方法。该方法是本案例需要用到的一个获取网页的方法,会构造一个向服务器请求资源的 Request对象,然后返回一个包含服务器资源的 Response对象。其作用是获取 HTML网页,对应于HTTP 的 GET。调用该方法需要一些参数。

  • requests.get(url,params= None,**kwargs)。
  • url:需要获取页面的URL链接。
  • params:可选参数,URL 中的额外参数,字典或字节流格式。
  • **kwargs:12个控制访问的参数。

2.Response对象机器属性

Response对象包含服务器放回的所有信息,也包含请求的 Request信息。该对象具如下属性。

  • status_code:HTTP请求的返回状态,200表示链接成功。只有链接成功的对象内容才是正确有效的,而对于链接失败的行为则产生异常的结果。这里可以使用raise_for_status()方法。该方法会判断 status_code是否等于200,如果不等于则产生异常requests.HTTPError。
  • text:HTTP 相应内容的字符串形式,也即 URL对应的页面内容。这部分也是爬虫需要获得的最重要部分。
  • encoding:从HTTP header 中猜测的响应内容的编码方式。选择正确的编码方式才能得到可读的正确信息内容。
  • apparent_encoding:从内容中分析出响应内容的编码方式。

学习完上面的基础知识,就可以利用Requests库编写程序来获取“豆瓣电影”首页的信息。获取“豆瓣电影”首页信息的程序如图3-3所示。
在这里插入图片描述
在控制台里就能够看见“豆瓣电影”首页HTTP相应内容的字符串形式,如图3-4所示。
在这里插入图片描述
[试一试]改变上述代码中的URL链接,尝试爬取你喜欢网站中的信息,看看返回的内容有什么区别。

3.3解析信息内容

浏览器通过解析HTML 文件,展示丰富的网页内容。HTML是一种标识性的语言。HTML 文件是由一组尖括号形成的标签组织起来的,每对括号形成一对标签,标签之间存在一定的关系,形成标签树。可以利用 BeautifulSoup库解析、遍历、维护这样的“标签树”。
[注意]对于没有HTML基础的读者,简单学习HTML后将有助于对本书后续内容的理解。

1.BeautifulSoup库中的一些基本元素

Tag:标签,最基本的信息组织单元,用<>标明开头,</>标明结尾。任何标签都可以用soup.访问获得,如果HTML 文档中存在多个相同< tag>对应内容时,soup.返回第一个该类型标签的内容。

  • Name:标签的名字,即尖括号中的字符串。如

    的name是’p’。每个都有自己的名字,可通过.name获取。
  • Attributes:标签的属性,字典形式组织。一个可以有零个或多个属性。可以通过.attrs获取。
  • NavigableString:标签内非属性字符串,即<>和</>之间的字符串。可以通过< tag >.string调用。
  • Comment:标签内字符串的注释部分,一种特殊的 Comment类型。

2.BeautifulSoup库的三种遍历方式

由于HTML格式是一个树状结构,BeautifulSoup库提供了三种遍历方式,分别为下行遍历、上行遍历和平行遍历。
利用下列属性可以轻松地对其进行遍历操作。
(1)下行遍历。
.contents:子节点的列表,将所有的儿子节点存人列表。
.children:子节点的迭代类型,与.contents相似。
.descendants:子孙节点的迭代类型,包含所有子孙节点。
(2)上行遍历。
.parent:节点的父亲标签。
.parents:节点先辈标签的迭代类型。
(3)平行遍历。
.next_sibling:返回按照HTML 文本顺序的下一个平行节点标签。
.previous_sibling:返回按照HTML 文本顺序的上一个平行节点标签。
.next_siblings:迭代类型,返回按照HTML 文本顺序的所有平行节点标签。
.previous_siblings

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值