BeautifulSoup的一些方法

#BeautifulSoup应用模拟登陆 以及验证码处理
from bs4 import BeautifulSoup as bs#简单好用
with open('111.html','r',encoding='utf-8') as f:
    html=f.read()#模拟获取的源码
html=bs(html,features="lxml")#源码被BeautifulSoup格式化,lxml是解析库
print(html.prettify())#打印出更好看的html文本
div=html.findChild('div')#找出div下的所有后代并带上<div>
print(div)
#BeautifulSoup将复杂的HTML文档转换成一个复杂的树形结构,
    #每个节点都是Python对象,
    #所有对象可以归纳为4种
        #Tag
        #NavigableString
        #BeautifulSoup
        #Comment
#Tag :通俗点将就是HTML中的一个个标签<>
print('title============'+str(html.title))
print('head==========='+str(html.head))
print('a============'+str(html.a.text))#获得a标签的文本
print('p============'+str(html.p))
print('div============'+str(html.div))
print('div============'+str(html.div.text))
#对于Tag它有两个重要的属性,是name和attrs
print(html.name)#[document]  str类型
    #soup对象本身比较特殊,他的name即为[document]
print(html.head.name)
print(html.div.name)
    #不同的标签输出的即为它自身的名字
print(html.div.attrs)
print(html.a.attrs)
    #获得该标签所有属性 键值对 的一个字典
html.a["id"]="123456"
print(html.a)
print(html.a.attrs)
    #修改属性值
print(html.a)
del html.a["id"]
print(html.a)
    #删除a标签id属性
#NavigableString:获取标签内部的文字用.string即可
print(html.div.string)
print(html.a.string)
#BeautifulSoup:表示一个文档的内容,大部分时候可以把它当作Tag对象,是一个特殊的Tag
    #可以获取他的 类型 名称 属性
print(type(html))
print(html.name)
print(html.attrs)
#Comment对象用于操作文档的注释部分
 
#搜索文档树
#find_all(name,attr,recursive,text,limit,**kwargs)
#html.find_all()
    #name参数可以查找所有名为name的tag,字符串对象会被自动忽略掉
        #name传参传入tag标签字符串
print(html.find_all('div'))
print(html.findAll(style= "ruby-span"))#属性值找东西

        #传入正则表达式 BeautifulSoup通过正则match()来匹配内容
import re
for tag in html.find_all(re.compile('^b')):
    print(tag)
    print(tag.name)
        #传入方式还有很多~~~~~~~~~~
#CSS选择器
#这就是另一种与find_all方法有异曲同工之妙的查找方法
#写CSS时,标签名不加任何修饰,类名class前加. ,id名前加*
#用这种方法筛选元素,html.select() 返回类型是list
    #通过标签名查找,返回list
print(html.select('div'))
    #通过类名查找 '.类名'返回列表
print(html.select('.ewe'))

# .contents 和 .children
# .contents会将标签下一级所有的子节点以列表的形式输出
# .children拿到上面结果的迭代器,可循环
tag=html.head
print(tag.contents)
print(tag.children)
#.descendants可以对子节点进行递归循环的迭代器
print(tag.descendants)
#.string获得一个标签的字符串
print(html.head.string)
print(html.div.string)
print(html.string)
print(html.strings)#迭代器
# .tripped_strings
print(html.stripped_strings)#迭代器
posted @ 2020-11-18 16:44  Eric_Z-HACK  阅读(153)  评论(0)    收藏  举报