Beautiful Soup的使用

来源:互联网 发布:农业科技网络书屋app 编辑:程序博客网 时间:2024/05/23 00:28

    • 编码
    • 属性
      • Tag
    • 文档树操作
    • 过滤器
      • 字符串
      • 正则表达式
      • 列表
      • 方法
    • find_all
    • find
    • 修改文档

编码

任何HTML或XML文档都有自己的编码方式,比如ASCII 或 UTF-8,但是使用Beautiful Soup解析后,文档都被转换成了Unicode:
通过Beautiful Soup输出文档时,不管输入文档是什么编码方式,输出编码均为UTF-8编码

智能检测编码
dammit = UnicodeDammit(“Sacr\xc3\xa9 bleu!”)
print(dammit.unicode_markup)

属性

Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .

Tag

tag.name 显示标签名称,可以获取或设置
tag[‘class’] 获取class属性,可添加修改删除
tag.string tag中的字符串
tag.get_text() 获取tag中的文本内容

文档树操作

soup.a 第一个a节点.非常方便的获取节点
soup.contents 列出所有子节点,列表

过滤器

过滤器可以被用在tag的name中,节点的属性中,字符串中或他们的混合中.

字符串

Beautiful Soup会查找与字符串完整匹配的标签

soup.find_all('b')<b>The Dormouse's story</b>

str(soup) 和unicode(soup),压缩输出,去掉格式,并可设置输出编码
get_text() 只返回文本内容

正则表达式

如果传入正则表达式作为参数,Beautiful Soup会通过正则表达式的 match() 来匹配内容.

列表

匹配与列表中任意元素匹配的内容

方法

方法只接受一个元素参数 ,如果这个方法返回 True 表示当前元素匹配并且被找到

def has_class_but_no_id(tag):return tag.has_attr('class') and not tag.has_attr('id')soup.find_all(has_class_but_no_id)<p class="title"><b>The Dormouse's story</b></p>,<p class="story">Once upon a time there were...</p>,<p class="story">...</p>

find_all

find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.

find_all( name , attrs , recursive , string , **kwargs )

soup.find_all(“title”) 查找子元素中的title标签
soup.find_all(id=”link2”) 查找id属性是link2的标签。由于class是python关键词,使用class_代替
soup.find_all(“p”, “title”) p标签,class属性为title的元素
soup.find_all(string=”Elsie”) 搜索文档内容中有Elsie的标签

soup.find_all(“a”, limit=2) 只返回两条结构
soup.html.find_all(“title”, recursive=False) 只搜索直接节点

find

只返回一个结果的find_all.

修改文档

tag.name = “blockquote” 修改标签
tag[‘class’] = ‘verybold’ 修改属性
tag.string = “New link text.” 修改内容

soup = BeautifulSoup(” < a>Foo< / a>”)
soup.a.append(“Bar”) a标签中的内容变为FooBar

new_comment = soup.new_string(“Nice to see you.”, Comment)
tag.append(new_comment) 添加一段注释
tag.clear() 移除当前tag内容
i_tag = soup.i.extract() 将当前tag移出父标签,并返回

0 0
原创粉丝点击