BeautifulSoup简记

来源:互联网 发布:做菜单用什么软件 编辑:程序博客网 时间:2024/06/07 13:37

对象类型

  • BeautifulSoup对象
  • Tag对象
  • NavigableString对象
html_doc = """<html><head><title>The Dormouse's story</title></head><p class="title"><b>The Dormouse's story</b></p><p class="story">Once upon a time there were three little sisters; and their names were<a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,<a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and<a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>;and they lived at the bottom of a well.</p><p class="story">...</p>"""from bs4 import BeautifulSoupsoup = BeautifulSoup(html_doc, 'lxml')

第一部分: 文档结构

# 得到文档结构中第一个符合条件的元素,Tag对象soup.a # <a href="http://example.com/elsie" class="sister" id="link1">Elsie</a>,# 处理子节点关系soup.body.contents #contents获得的是一个数组soup.body.children # children 获得的是一个可迭代的对象soup.body.descendants# 获取字符串内容soup.body.string # 只能得到其第一层子节点的字符串内容,多个子节点则无法解析soup.body.strings # 多个子节点是strings得到一个列表soup.body.stripped_strings # 去掉多余的回车和空格行# 父节点soup.body.parent # 顶层节点时BeautifulSoup对象soup.body.parents# 兄弟节点soup.body.nex_siblingsoup.body.next_siblingssoup.body.previous_siblingsoup.body.previous.siblings# soup.body.next_elements/element# soup.body.previous_elements/element

第二部分:使用条件搜索文档树

soup.body.find()soup.body.find_all()soup.body.find(['a', 'b'])soup.body.find_all(name, attrs, recursive, text **kw)# 每个参数可以接受的数据类型有:"字符串,正则,函数,列表等"# 第一个参数表示tag匹配'a'或者'b'# 第一个参数还可以为一个函数,函数返回true或者false,传入的是tag值# 第二个参数可以指定tag的属性,注意class属性使用class_关键字# recursive为false表示搜索第一层,text表示搜索匹配字符串# kw如果不是函数内置的关键字,则被认为是tag的属性进行匹配# 简化方法:find_all由于很常用,可以通过BeautifulSoup和tag对象# 的调用方式来方便的调用find_all方法,如下:soup('a', class_='sister')soup.find('a', class_='sisiter')# find , find_parents(), find_parent()# find_next_siblinhd find_next_sibling()# find_previous_sibling find_previous_siblings# 以上这些都和find_all同样的使用方法,同样的参数值。

第三部分:使用css来搜索

soup.select()# 依赖于标准css选择器

第四部分:修改文档书

# pass,暂时用不上

第五部分: 输出

soup.prettify() # 美化输出str(soup) # 压缩输出soup.get_text() # 解析所有的字符串

第六部分:优化内存

strainer = SoupStrainer('a') # 像find_all的参数一样调用创建# SoupStrainer类型对象soup = BeautifulSoup(htmldoc, 'lxml', parse_only=strainer)