首页 > 代码库 > BeautifulSoup基础

BeautifulSoup基础

MarkdownPad Document

BeautifulSoup

findAll函数
nameList = bsObj.findAll("span", {"class":"green"})
for name in namelist:
    print(name.get_text())

#找到所有属性class="green"的span标签,通常在你准备打印、存储和操作数据时,应该最后才使
用 .get_text() 。一般情况下,你应该尽可能地保留 HTML 文档的标签结构。

findAll(tag, attributes, recursive, text, limit, keywords)
find(tag, attributes, recursive, text, keywords)

tag:可以传一个标签名称或者多个标签组成的列表
attributes:用字典封装一个标签的若干属性和对应的属性值
recursive:默认为True,递归查找子标签,设置为False则只查找一级标签
text:用标签的文本内容去匹配,而不是标签的属性
limit:对获取的项进行限制,find就是findall的limit=1
keyword:可以选择那些具有指定属性的标签(由于class在Python中是保留字,而在CSS中是属性名,所以不推荐用keyword)
例如:
allText = bsObj.findAll(id="text")

BeautifulSoup中的对象

  • BeautifulSoup对象——bsobj

  • 标签Tag对象——bsObj.div.h1

  • NavigableString对象——标签里的文字

  • Comment对象——查找HTML文档的注释标签

    bsObj.div.findAll("img") 会找出文档中第一个 div 标签,然后获取这个 div 后 代里所有的 img 标签列表。

    for child in bsObj.find("table",{"id":"giftList"}).children: print(child)     #找table的子标签

    for sibling in bsObj.find("table",{"id":"giftList"}).tr.next_siblings: print(sibling)   #找tr后面的兄弟标签

  • nextsiblings与previoussiblings 一组

  • nextsibling与previoussibling 一个

  • parent  找父标签

邮箱正则:  [A-Za-z0-9._+]+@[A-Za-z]+.(com|org|edu|net)

技术分享

通过正则表达式匹配内容:
images = bsObj.findAll("img",{"src":re.compile("\.\.\/img\/gifts/img.*\.jpg")})
#都是以 ../img/gifts/img 开头 以 .jpg 结尾
for image in images:
    print(image["src"])

获取属性

  • tag.attrs   得到属性字典

  • imgTag.attrs["src"]   获取图片标签的src属性的值

  • soup.findAll(lambda tag: len(tag.attrs) == 2)

BeautifulSoup基础