0

0

使用Beautiful Soup解析dom的方法

一个新手

一个新手

发布时间:2017-09-20 09:34:53

|

2696人浏览过

|

来源于php中文网

原创


使用Beautiful Soup解析dom

本文主要介绍如何使用Beautiful Soup解析dom。

Beautiful Soup的简介

Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
 Beautiful Soup自动将输入文档转换为Unicode编码,输出文档转换为utf-8编码。你不需要考虑编码方式,除非文档没有指定一个编码方式,这时,Beautiful Soup就不能自动识别编码方式了。然后,你仅仅需要说明一下原始编码方式就可以了。
 Beautiful Soup已成为和lxml、html6lib一样出色的python解释器,为用户灵活地提供不同的解析策略或强劲的速度。

Beautiful Soup 安装

博主使用的是mac,这里面就只介绍在mac下beautiful soup的安装方法。python 第三方库安装都很简单,楼主一直都使用pip来安装。

安装pip

easy_install pip

安装Beautiful Soup

pip install beautifulsoup4

有时候我们使用pip install beautifulsoup4 命令来安装会报错,这时候我们需要在命令前加上sudo来获得权限。

sudo pip install beautifulsoup4

到目前为止我们的准备工作就做好了,现在我们可以开始使用Beautiful Soup。本文只使用到了bs4(备注:文章中bs4=beautifulsoup4)部分方法,想要进一步了解bs4的可以查看bs4官方文档,楼主的项目建的很简单index.py和一个html文件夹,里面放有一些.html静态文件

eMart 网店系统
eMart 网店系统

功能列表:底层程序与前台页面分离的效果,对页面的修改无需改动任何程序代码。完善的标签系统,支持自定义标签,公用标签,快捷标签,动态标签,静态标签等等,支持标签内的vbs语法,原则上运用这些标签可以制作出任何想要的页面效果。兼容原来的栏目系统,可以很方便的插入一个栏目或者一个栏目组到页面的任何位置。底层模版解析程序具有非常高的效率,稳定性和容错性,即使模版中有错误的标签也不会影响页面的显示。所有的标

下载

index.py文件

# coding=utf-8import osfrom bs4 import BeautifulSoupimport sys 

#定义一个list来存放文件路径paths=[]#获取所有的文件路径def get_paths():
    for fpathe,dirs,fs in os.walk('html'):        
    for f in fs:            
    #print os.path.join(fpathe,f)
            #将拼接好的path存放到list中
            filepath=os.path.join(fpathe,f)            
            #只放入.html后缀文件路径
            if(os.path.splitext(f)[1]==".html"):
                paths.append(filepath)#读取html文件修改后并写入相应的文件中去def reset_file(path):
    #判断文件是否存在
    if not os.path.isfile(path):        
    raise TypeError(path + " does not exist")    
    #读取文件,bs4自动将输入文档转换为Unicode编码,
    #输出文档转换为utf-8编码,bs4也可以直接读取html
    #字符串,例如BeautifulSoup('

content

') soup=BeautifulSoup(open(path)) #select是bs4提供的方法,和jquery的$选择器一样 #方便。可以标签(eg:p,title,p...)来查找,也 #也可以通过css的 class .和id #来查找,基本上和我们 #使用$一样。 #选取id="nav"节点下的所有li元素里面的a标签,返回值是一个list集合 nav_a=soup.select("#nav li a") #修改a的href属性 if(len(nav_a)>1): nav_a[0]["href"]="/m/" nav_a[1]["href"]="/m/about_mobile/m_about.html" #选取class="footer"里的所有a标签 footer_a=soup.select(".footer a") if(len(footer_a)>0): footer_a[1]["href"]="/m/about_mobile/m_sjdt.html" content_p=soup.select(".content p") #修改

我是string

里面的文本内容 if(len(content_p)>0): content_p[0].string="修改p标签里面的测试内容" #修改系统的默认编码 reload(sys) sys.setdefaultencoding('utf-8') #打开相应的文件写入模式,打开文件不要放入try里面,否则会 #出现异常 f=open(path,"w") try: #写入文件 f.write(soup.prettify()) finally: #关闭文件 file.close()#定义main函数程序的入口 if __name__=="__main__": get_paths() #遍历所有文件路径 for p in paths: reset_file(p)

相关专题

更多
PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

11

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

13

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

93

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

112

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

155

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

相关下载

更多

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号