1 find() and findAll()
function definition :
findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)
text sample
"<span class="red">Heavens! what a virulent attack!</span>" replied <span class=
"green">the prince</span>, not in the least disconcerted by this reception.
findAll() usage
findAll({"h1","h2","h3","h4","h5","h6"})findAll("span", {"class":{"green", "red"}})
nameList = bsObj.findAll(text="the prince")
allText = bsObj.findAll(id="text")
images = bsObj.findAll("img",{"src":re.compile("../img/gifts/img.*.jpg")}) // 正则表达式
soup.findAll(lambda tag: len(tag.attrs) == 2) // lambda 表达式
bsObj.findAll(id="text")和 bsObj.findAll("", {"id":"text"}) 效果相同
2 Navigating Trees
.children 标签
for child in bsObj.find("table",{"id":"giftList"}).children:
.tr.next_siblings 标签
for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings:
parent 和 parents标签
bsObj.find("img",{"src":"../img/gifts/img1.jpg"}).parent.previous_sibling.get_text())
拓展
bs4 替代库
lxml
这个库(http://lxml.de/)可以用来解析 HTML 和 XML 文档,以非常底层的实现而闻名 于世,大部分源代码是用 C 语言写的。虽然学习它需要花一些时间(其实学习曲线越 陡峭,表明你可以越快地学会它),但它在处理绝大多数 HTML 文档时速度都非常快。
• HTML parser
这是 Python 自带的解析库(https://docs.python.org/3/library/html.parser.html)。因为它不 用安装(只要装了 Python 就有),所以可以很方便地使用。