BeautifulSoup概述

电脑杂谈  发布时间:2020-04-25 21:07:08  来源:网络整理

python 安装beautifulsoup_beautifulsoup安装_beautifulsoup 字符串

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

beautifulsoup安装_python 安装beautifulsoup_beautifulsoup 字符串

当前节点的所有父节点: .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,方法.

beautifulsoup 字符串_python 安装beautifulsoup_beautifulsoup安装

此方法搜索当前节点的所有标记子节点.

名称参数:

引用标签的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是一个多值属性,因此您只需要匹配一个值即可获得结果. 所谓不完全匹配.

使用完全匹配时,过滤器中的字符顺序需要与实际字符匹配才能获得相应的结果.

文本参数:

beautifulsoup安装_beautifulsoup 字符串_python 安装beautifulsoup

搜索是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()

beautifulsoup安装_beautifulsoup 字符串_python 安装beautifulsoup

在上述三种类型之后,可以添加“ 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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...