ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

读Bsautiful Soup库有感

2021-10-04 20:32:03  阅读:173  来源: 互联网

标签:有感 soup find Soup 选择器 print Bsautiful 节点 属性


Beautiful Soup库](https://www.cnblogs.com/wkhzwmr/p/15230635.html)


Bequtiful会自动将输入的文档转化为Unicode编码,输出文档转化为UTF-8编码。一般在使用的过程中不需要考虑编码的问题,除非文档没有指定编码,这啥意思呢,是指爬取下来的文档还是啥,摸棱两可。

使用Beautiful Soup库

1.创建个Beautiful Soup对象
使用BeautifulSoup()类,该类第一个参数需要指定待分析的html代码,第二个参数指定lxml解析器(第二个参数加引号(''))
在解析HTML的过程中BeautifulSoup对象会将HTML中的各个级别的标签映射成对象中同级别的属性。

节点选择器

可以通过节点的名称来选取节点,然后再用string属性就可以得到节点内的文本
节点的属性是attrs

嵌套选择节点

通过BeautifulSoup对象的属性获得的每一个节点都是一个bs4.element.Tag对象。在该对象的基础上同样可以使用节点选择器进行下一步的选择,也就是继续选择Tag对应的节点的子节点。

soup = BeautifulSoup(html,'lxml')
head = soup.head
print(head.title.string)

选择子节点

1.直接获取子节点
通过contents和childern返回一个可迭代对象
2.获取所有子孙节点
可以属性descendants属性,该属性返回一个产生器,需要使用for循环迭代才可以输出产生器的值

选择父节点

parent属性返回某个节点的直接父节点
parents属性会返回一个可迭代对象,获得当前节点所有的父节点对应的Tag对象

print(soup.a.parent)
print(soup.a.parent['class'])
for parent in soup.a.parents:
    print('<',parent.name,'>')

选择兄弟节点

next_sibling属性获得当前节点的下一个兄弟节点,previous_sibling属性获得当前节点的上一个兄弟节点,
next_siblings属性获得当前节点后面的所有兄弟节点,
previous_siblings属性获得当前节点前面的所有兄弟节点,

方法选择器

find_all方法用于根据节点名、属性、文本内容等选择符合要求的节点。
常用的参数有name、attrs和text
name参数用于指定节点名,find_all方法会选取所有节点名为name参数值相同的节点,find_alll方法返回一个bs4.element.ResultSet对象,该对象是可迭代的。

soup = BeautifulSoup(html,'lxml')
ulTags = soup.find_all(name='ul')

attrs参数通过节点的属性查找,attrs参数是一个字典类型,key是节点属性名,value是节点属性值。
虾米那使用attrs参数

tags = soup.find_all(class_='item2')
print(tags)
tags = soup.find_all(id='button1')
print(tags)

text参数可以搜索匹配的文本节点,传入的参数是字符串,也可以是正则表达式对象(经过re.compile()编译的表达式)

tags = soup.find_all(text='geekori.com')
print(tags)
tags = soup.find_all(text=re.compile('Hello'))

find方法

find方法用于查询满足条件的第一个节点,而find_all方法用于查询所有满足条件的节点
find方法和find_all方法的参数和使用方法完全相同

CSS选择器

使用Tag对象的select()方法,该方法接收一个字符串类型的CSS选择器,常用的CSS选择器有

  1. .classname:选取样式值为classname的节点
  2. nodename:选取节点名为Nodename的节点
    3.#idname:寻去id属性值为idname的节点
    返回的因该是个列表,可以使用索引的方法提取元素

嵌套选择器

就是在选取了一些节点的情况下,还可以继续使用CSS选择器。但这里你要知晓自己目前所在的标签在哪

获取属性值和文本

之前上面使用attrs可以返回属性值,这里同样可以,因为select()方法返回的是Tag对象的集合。
获取问版本可以使用string,也可以使用CSS选择器特有的get_text()方法

标签:有感,soup,find,Soup,选择器,print,Bsautiful,节点,属性
来源: https://www.cnblogs.com/wkhzwmr/p/15367114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有