爬取某电影网站最新电影信息——解析网页的BeautifulSoup模块

BeautifulSoup是python的一个解析、遍历、维护网页文档“标签”的功能库模块,其主要功能是从连接的网站上通过解析文档抓取网页数据(www.huaipan.cn)。BeautifulSoup模块提供了一些功能函数用来处理导航、搜索、修改分析树等。

BeautifulSoup模块使用时不需要考虑编码方式,它自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。

01

安装BeautifulSoup模块

BeautifulSoup模块不是Pyton系统自带模块,因此,在使用前必须用pip安装该模块。用pip安装BeautifulSoup模块的命令如下:

pip installbeautifulsoup4

安装结果如图9.4所示。

图9.4 安装BeautifulSoup模块

02

BeautifulSoup模块的基本元素

BeautifulSoup模块的基本元素如表9-2所示。

表9-2 BeautifulSoup模块的基本元素

03

HTML标签及标签树

1

标签

HTML文档的语句称为标签,例如:

2

“标签树”

在解析网页文档的过程中,需要应用BeautifulSoup模块对HTML内容进行遍历。

设有如下的一个HTML文档:

<html>

<head>

....

</head>

<body>

<pclass="title">The demo Python Project. </p>

<pclass="course">Python is a programming language.

<ahref="http://www.icourse163.com">Basic Python </a>

<ahref="http:..www.python.org">Advanced Python </a>

</p>

</body>

</html>

将其文档标签绘成树形结构,该结构称为“标签树”,如图9.5所示。

图9.5 “标签树”

04

BeautifulSoup模块对网页页面元素定位方法

设定义BeautifulSoup模块解析器对象为soup,则按网页页面中的标签元素进行定位的方法如表9-3所示。

表9-3 BeautifulSoup模块对象的常用信息提取方法

1

通过标签名定位

例:设有HTML文档的代码如下

<table>

<td>apple </td>

<td>banana </td>

<table>

soup.find( "td") # 返回第一个“<td></td>”节点

soup.find_all( "td") # 返回所有的“<td></td>”节点

2

通过标签属性定位

例:设有HTML文档的代码如下

<table>

<tdname="fruit">apple </td>

<tdname="fruit">apple </td>

</table>

soup.find(name= "fruit") # 返回第一个“<td></td>”节点

soup.find_all(name= "fruit") # 返回所有的“<td></td>”节点

3

通过标签名+属性定位

例:设有HTML文档的代码同(2),则

soup.find( "td",{ "name": "fruit"}) # 返回第一个“<td></td>”节点

soup.find_all( "td",{ "name": "fruit"}) # 返回所有的“<td></td>”节点

4

通过text定位

例:设有HTML文档的代码同(2),则

soup.find(text= "apple") # 返回第一个“<td></td>”节点

05

应用示例

【例9-3】 爬取某电影网站最新电影信息。

打开某电影网站:

https://movie.douban.com/cinema/nowplaying/xiamen/

其页面如图9.6所示。

图9.6 某电影网站

1

获取网站页面的HTML代码

url = "https://movie.douban.com/cinema/nowplaying/xiamen/"

headers = {

"USER-Agent": UserAgent.chrome

}

req = request.Request(url, headers = headers)

resp = request.urlopen(req)

html_data=resp. read.decode

print(html_data)

2

创建解析器对象

在浏览器按下F12键进入调试页面。在调试页面的代码中,当鼠标停留在某代码行时,左边网页页面需要选中的栏目板块被灰色覆盖,如图9.7所示。

图9.7在浏览器按下F12键进入调试页面

在调试页面的代码中,找到电影名称,如图9.8所示。

图9.8 调试页面中电影名称等信息

从图9.6中可以看到,电影名称等信息放在<div id = “upcoming”>区域块中,其中标签<li class=“list-item”>显示具体信息内容。

因此,可以使用解析器对象对其标签属性进行定位:

soup= bs(html_data, "html.parser") # 构建一个解析器

nowplay1= soup.find_all( "div", id= "nowplaying")

nowplay2= nowplay1[ 0].find_all( "li", class_ = "list-item")

3

通过循环,解析出所有电影名称信息

foritem in nowplay2:

nowplay_dict[ 'id'] = item[ 'id']

nowplay_dict[ 'name'] = item[ 'data-title']

nowplay_list. append(nowplay_dict)

4

完整程序如下

程序运行结果如图9.9所示。

图9.9 爬取某电影网站最新电影名称

06

视频讲解

07

参考书籍

Python程序设计案例教程——从入门到机器学习(第2版)(微课版)

ISBN:9787302567691

作者:张思民

定价:49.8元

08

精彩推荐

  • 鲲鹏架构入门与实战︱鲲鹏应用迁移(附代码)

  • 《机器学习》实验指导书(附实验参考+代码)

  • Python爬虫综合实战 │ 创建云起书院爬虫(附代码)

  • Python爬虫实战 │ Email提醒(附代码)

  • Python深度学习 │一文掌握卷积神经网络

  • Python边做边学︱商品列表信息爬取(附代码)

  • P ython爬虫实战│状态521网页的爬取

  • Python爬虫实战│爬取天气数据的实例详解(附源码)

  • Python实训:用贪婪算法分析业务员路径问题|附源码

主营产品:口罩机,无纺布机械