python find next_Python Beautiful Soup 4

Beautiful Soup 4

Beautiful Soup 是一个灵活方便的网页解析库,利用它不用编写正则表达式即可方便地提取的网页信息 官方文档:https://www.crummy.com/software/BeautifulSoup/bs4/doc/

Beautiful Soup 支持 Python 标准库中的 HTML 解析器,还支持一些第三方的解析器 主要有几种: frombs4importBeautifulSoupBeautifulSoup(markup,"html.parser")# Python 标准库BeautifulSoup(markup,"lxml")# lxml HTML 解析器BeautifulSoup(markup,"xml")# lxml XML 解析器 = BeautifulSoup(markup, ["lxml", "xml"])BeautifulSoup(markup,"html5lib")# html5lib

官方推荐使用 lxml frombs4importBeautifulSoupsoup=BeautifulSoup(markup,"lxml")print(soup.prettify())

瀵硅薄

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

Tag 瀵硅薄

通过 Tag.name 获取 Tag 对象的标签名Tag.name 可以被修改,会在当前 BeautifulSoup 对象修改

标签的属性存储在字典中 通过 Tag.attr 可以获取属性字典,也可以直接用 key 查找 Tag[key] 如果一个属性对应多个值,则会返回一个列表 属性可以增加、删除、修改 frombs4importBeautifulSoupsoup=BeautifulSoup(markup,"lxml")tag=soup.div tag['id']='i1'tag['class']=['c1','c2']deltag['class']print(tag.get('id'))

NavigableString 瀵硅薄

字符串常被包含在tag内,并用 NavigableString 类包装 通过 tag.string 获取

BeautifulSoup 瀵硅薄

BeautifulSoup 对象表示的是一个文档的全部内容,大部分时候,可以把它当作 Tag 对象

通过标签名可以找到第一个匹配的标签,包括它的子标签 还可以多次调用查找它的子标签 标签选择器返回的是 Tag 对象 frombs4importBeautifulSoupsoup=BeautifulSoup(markup,"lxml")print(soup.tag_name)print(soup.parent_tag.child_tag)

contents

tag的 .contents 属性可以将 tag 的子节点以列表的方式输出

children

通过tag的 .children 生成器,可以对 tag 的子节点进行循环 list(tag.children)==tag.contents

descendants

返回一个包含所有 tag 子孙节点的生成器对象 frombs4importBeautifulSoupsoup=BeautifulSoup(markup,"lxml")fori,childinenumerate(soup.children):print(i,child)

parent

通过 .parent 属性来获取某个元素的父节点 文档顶层节点的父节点是 BeautifulSoup 对象, BeautifulSoup 对象没有父节点(None)

parents

返回一个包含所有 tag 祖先节点的生成器对象

next_sibling & previous_sibling

通过 .next_sibling & .previous_sibling 属性来获取某个元素的后一个 (前一个) 兄弟节点 如果没有返回 None

next_siblings & previous_siblings

通过 .next_siblings & .previous_siblings 属性可以对当前节点的兄弟节点迭代输出

find_all

find_all() 方法搜索当前 tag 的所有 tag 子节点,并判断是否符合过滤器的条件 用法: find_all(name,attrs,recursive,text,**kwargs)

通过 name: find_all('div')

通过 attr: find_all(id='i1')find_all(class_='c1')find_all(id=True)find_all(href=re.compile('cnblogs.com/'))find_all(attr={'attr1':'1','attr2':'2'}) find(name,attrs,recursive,text,**kwargs)# 返回找到的第一个find_parents(name,attrs,recursive,text,**kwargs)# 对当前tag的祖先节点进行迭代, 返回所有符合条件的节点find_parent(name,attrs,recursive,text,**kwargs)# 对当前tag的祖先节点进行迭代, 返回第一个符合条件的节点find_next_siblings(name,attrs,recursive,text,**kwargs)# 对当前tag的之后的兄弟节点进行迭代, 返回所有符合条件的节点find_next_sibling(name,attrs,recursive,text,**kwargs)# 对当前tag的之后的兄弟节点进行迭代, 返回第一个符合条件的节点find_previous_siblings(name,attrs,recursive,text,**kwargs)# 对当前tag的之前的兄弟节点进行迭代, 返回所有符合条件的节点find_previous_sibling(name,attrs,recursive,text,**kwargs)# 对当前tag的之前的兄弟节点进行迭代, 返回第一个符合条件的节点find_all_next(name,attrs,recursive,text,**kwargs)# 对当前tag的之后的 tag 和字符串进行迭代, 返回所有符合条件的节点find_next(name,attrs,recursive,text,**kwargs)# 对当前tag的之后的 tag 和字符串进行迭代, 返回第一个符合条件的节点find_all_previous(name,attrs,recursive,text,**kwargs)# 对当前tag的之前的 tag 和字符串进行迭代, 返回所有符合条件的节点find_previous(name,attrs,recursive,text,**kwargs)# 对当前tag的之前的 tag 和字符串进行迭代, 返回第一个符合条件的节点

Beautiful Soup支持大部分的CSS选择器, 在 Tag 或 BeautifulSoup 对象的 .select() 方法中传入字符串参数, 即可使用CSS选择器的语法找到tag soup.select('#i1')# id 选择,选择 id = 'i1' 的标签soup.select('.c1')# class 选择,选择 class = 'c1' 的标签soup.select('body')# 标签选择,选择所有 body 标签soup.select('body a')# 层级选择,选择 body 标签下的所有 a 标签soup.select('body > a')# 层级选择,选择 body 标签下一层的所有 a 标签soup.select('[attr1= "attr1"]')# 属性选择,选择所有 attr1 属性为 attr1 的标签

prettify() 方法将 Beautiful Soup 的文档树格式化后以 Unicode 编码输出,每个 XML/HTML 标签都独占一行

来源:博客园

作者:doubtful

链接:https://www.cnblogs.com/dbf-/p/11426118.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值