
tag.string.replace_with(新字符串)
标签可以包含其他标签或字符串,而NavigableString不能包含其他对象. 不支持.content,.string,find(),仅支持部分遍历文档树和搜索文档树中的属性.
代表文档的全部内容,在大多数情况下可以用作Tag对象,并支持遍历文档树和搜索文档树的大多数属性.
在HTML或XML中没有称为BeautifulSoup的标签,因此没有名称和属性属性,但是有一个特殊的属性:
soup.name
输出u'[文档]'
注释类型是NavigableString类型的子类,BeautifulSoup中还有其他具有相同原因的类型.
BeautifulSoup对象为一棵树,具有多个节点. 对于一个节点,相对于其位置,有子节点,父节点和同级节点.
标签可以包含多个标签和字符串,这些是该标签的子节点. NavigableString将没有子节点.
如果要获取标签,请使用上述方法:
soup.tag_name
您只能通过单击属性来获取当前名称的第一个标签. 要获取全部信息,您需要使用搜索文档树中的方法:
soup.find_all('tag_name')
tag的.contents属性可以输出列表中的所有子节点.
可以通过标记的.children遍历所有子节点.
.contents和.children仅适用于Tag的直接子节点. .descendant可用于遍历Tag的所有后代节点.
如果标签只有一个NavigableString类型的子节点,则可以使用.string获取. 如果有多个,请使用.strings遍历. 如果输出字符串包含空格或空白行,请使用.stripped_strings删除.
当前节点的父节点: .parent

当前节点的所有父节点: .parents
具有相同父节点的节点之间.
.next_sibling
.previous_sibling
类似地,所有同级节点:
.next_siblings
.previous_siblings
指向下一个或上一个解析对象:
.next_element
.previous_element
.next_elements
.previous_elements
两种常用方法: find(str)和find_all(str).
其中的str代表标签的名称. 它可以是纯字符串,正则表达式,列表(任何匹配均符合条件,是或运算),True(返回所有Tag节点均不返回字符串节点).
另一个输入参数不是str,而是方法. 此方法是仅接受一个元素作为输入参数的函数. 如果此函数返回True,则表明输入参数匹配要求. 例如:
* def has_class_but_no_id(标签): *
返回tag.has_attr('class')而不是tag.has_attr('id')
总而言之,过滤器包括: 纯字符串,正则表达式,列表,True,方法.

此方法搜索当前节点的所有标记子节点.
名称参数:
引用标签的name属性,并且字符串对象将被自动忽略.
可以使用所有类型的过滤器.
关键字参数:
如果指定了输入参数的名称,但不是上述输入参数的名称,则搜索时该输入参数将用作标记属性. 例如:
soup.find_all(id ='link2')
将在标记中返回属性id,并且与该ID对应的值是link2标记.
以上方法可以使用除该方法之外的所有过滤器.
某些特殊属性无法以这种方式直接使用,请使用以下方法:
soup.find_all(属性= {“键”: “值”})
例如,如果您要使用class属性进行搜索,因为class是python中的保留字,则您不能直接将其写为参数. 当前有两种方法:
soup.find_all('tag.name',class _ ='class_value')
soup.find_all('tag.name',attrs = {'class': 'class_value'})
Class_方法可以使用所有过滤器.
此外,由于class是一个多值属性,因此您只需要匹配一个值即可获得结果. 所谓不完全匹配.
使用完全匹配时,过滤器中的字符顺序需要与实际字符匹配才能获得相应的结果.
文本参数:

搜索是Tag中的字符串内容,可以使用所有过滤器.
限制参数:
限制退货数量.
递归参数:
find_all()默认为搜索当前节点的所有后代. 如果只需要搜索直接子级,则设置递归= False.
find_all()是实践中使用最广泛的.
因此有一个等效的简化版本:
soup.find_all('a')
汤('a')
find()方法等效于find_all(限制= 1),并返回第一个满足条件的对象.
区别在于,前者直接返回结果beautifulsoup 字符串,而后者返回仅包含一个元素的列表. 如果没有对象满足条件beautifulsoup 字符串,则前者返回None,后者返回一个空列表.
它也有一个简化的版本:
soup.find('head'). 查找(“标题”)
soup.head.title
除了find()和find_all()外,还有一些搜索方法:
find_parent()
find_next_sibling()
find_previous_sibling()

在上述三种类型之后,可以添加“ s”以表示全部.
find_next()
find_previous()
find_all_next()
find_all_previous()
. Tag或BeautifulSoup对象的Select()方法.
忘记它
格式化文档树后,
prettify()输出.
如果您不注意格式,则可以使用python str()或unicode().
如果要获取标记中包含的文本内容,请使用get_text()获取当前节点的文本和后代节点中的文本. 返回的是Unicode.
您可以使用“ |”指定参数设置分隔符,例如get_text(“ |”)作为分隔符.
get_text(strip = True)可以删除文本前后的空白.
或使用.stripped_strings遍历.
BeautifulSoup的第一个输入参数是一个文档,第二个输入参数是一个文档解析器. 默认情况下,优先级顺序为: lxml,html5lib,python标准库. 只有lxml支持xml文档的解析.
汤使用Unicode编码.
BeautifulSoup执行了编码检测,并自动转换为Unicode.
BeautifulSoup对象的.original_encoding属性用于获取自动识别编码的结果.
当然,它的速度较慢,有时是错误的. 创建BeautifulSoup对象时,可以指定参数from_encoding告诉文档的编码方法.
有时,在转码时,特殊字符会被特殊Unicode替换. 您可以通过BeautifulSoup对象的.contains_repalcement_characters属性判断是否是这种情况. True表示特殊替换.
输出编码统一为UTF8. 如果需要其他编码,则它与常规python字符串相同,并且需要手动设置.
使用chartdet库可以提高编码检测的效率.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-188754-1.html
你会越来约差
期待
函数加油