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)
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))
#每个节点都是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属性
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)
print(html.div.string)
print(html.a.string)
#BeautifulSoup:表示一个文档的内容,大部分时候可以把它当作Tag对象,是一个特殊的Tag
#可以获取他的 类型 名称 属性
print(type(html))
print(html.name)
print(html.attrs)
#可以获取他的 类型 名称 属性
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"))#属性值找东西
#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'))
#这就是另一种与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)
print(tag.descendants)
#.string获得一个标签的字符串
print(html.head.string)
print(html.div.string)
print(html.string)
print(html.strings)#迭代器
print(html.head.string)
print(html.div.string)
print(html.string)
print(html.strings)#迭代器
# .tripped_strings
print(html.stripped_strings)#迭代器
print(html.stripped_strings)#迭代器

浙公网安备 33010602011771号