python下操作xml和html

来源:互联网 发布:php在线人数统计 编辑:程序博客网 时间:2024/05/21 18:48

    最近项目需要一个做一个小工具, 开始时想到了用shell写一个脚本, 后来由于要操作xml和html, 感觉shell操作起来不方便, 于是想到了用python, 但我对python一点不懂, 于是现学, 网上找了一个简明教程看了一下, 然后就开始我的第一个python程序了.

    今天把这个程序里用到了关于xml和html操作的部分, 记录下来, 以便加深自己的印象. 在网上搜索的结果让我决定用BeautifulSoup这个库, 这个库对html解析的支持很好, xml的解析依赖另一个库lxml, 于是我又下载安装了lxml. 好了, 工具齐备了.

    我的需求其实很简单, 第一个需求是修改一个html文件里某个tag的属性. 第二个需求是修改一个xml文件的属性, 都是修改他们.

    BeautifulSoup应该是在解析时把他们读入到内存一个数据结构里面, 然后就可以对这个数据结构便捷地操作, 如果初始化时发现格式有问题, 还可以给你自动补全.

    一. 修改html文件:

    先说说修改html, 我需要找到某个标签的属性, 然后写入新值, 比如有如下html文件

<!DOCTYPE html><html lang="zh-cn"><body>  <p class="name">jodan</p>  <p class="sex">male</p></body></html>
需要把里面class=name的标签名字改为kobi, 那么python代码如下:
import osfrom bs4 import BeautifulSoup #引入BeautifulSoupfp = open("test.html",'r+')soup = BeautifulSoup(fp)#根据文件内容新建一个BeautifulSoup对象name = soup.find(class_="name")#搜索class为name的tagname.string = "kobi"#修改为新的名字fp.seek(0,os.SEEK_SET)#移动到文件头fp.write(str(soup))#重写整个文件fp.close()
注意由于class是python的关键字, 需要用class_方能搜索到属性class.


    二.修改xml文件:

    需求也是找到某个标签的属性, 修改为新的值, 比如有如下xml:

<?xml version="1.0" encoding="UTF-8"?><channels><channel>name</channel></channels>
修改channel标签的值为newChannel, python代码如下:
import osfrom bs4 import BeautifulSoupfp = open("test.xml",'r+')soup = BeautifulSoup(fp,"xml")numbers = soup.find_all('channel')numbers[0].string = "newChannel"fp.seek(0,os.SEEK_SET)fp.write(str(soup))fp.close()
代码几乎和修改html文件一样, 不同的是初始化BeautifulSoup对象是, 需要传入一个额外参数'xml'来表明解析的是xml格式的文件.

原创粉丝点击