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

BeautifulSoup是python的一个解析、遍历、维护网页文档“标签”的功能库模块,其主要功能是从连接的网站上通过解析文档抓取网页数据。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实训:用贪婪算法分析业务员路径问题|附源码
鲲鹏架构入门与实战︱鲲鹏应用迁移(附代码)
《机器学习》实验指导书(附实验参考+代码)
Python爬虫综合实战 │ 创建云起书院爬虫(附代码)
Python爬虫实战 │ Email提醒(附代码)
Python深度学习 │一文掌握卷积神经网络
Python边做边学︱商品列表信息爬取(附代码)
P ython爬虫实战│状态521网页的爬取
Python爬虫实战│爬取天气数据的实例详解(附源码)
责任编辑: