Beautiful Soup库使用
Beautiful Soup库是一个可以解析HTML和xlm文件的库,可以在使用requests库获取html格式文件后对其进行处理
一、Beautiful Soup库的基本元素
(1)tag
标签,最基本的信息单元,与HTML中的标签意义相同
使用 .tag的形式获得一个标签
(2)name
标签的名字, tag .name 形式调用,以字符串格式返回一个标签的名称
(3)attributes
标签的属性,以字典格式返回这个标签的属性值
tag .attrs 格式调用
(4)NavigableString
返回标签中非属性值的字符串部分,即<>…</>中的部分
tag .string 格式调用
(5)Comment
注释,不会被显式调用,通常在使用.string后将返回的字符串使用type()方法检测格式判断是否为注释内容
二、Beautiful Soup库的遍历方法
将整个HTML文件理解为标签树的形式
需要特别注意的是,标签中的Navigable String也构成了节点,所以在遍历时的下一个节点不一定是标签类型,需要做特别判断
1、下行遍历方法
指自上而下的遍历方式
.contents
子节点的列表类型,将所以tag标签的儿子节点全部存入
.children
与 .contents类似,用于遍历循环所有儿子节点,不同点在于 .children 是迭代类型
.descendants
子孙节点的迭代类型,包含全部的子孙节点,用于循环遍历
2、上行遍历方法
指自下而上的遍历方式
.parent
返回节点的父亲标签
.parents
返回先辈标签的迭代类型
需要注意,soup标签的父节点为不存在,在迭代遍历时应作相应处理
3、平行遍历方法
按照HTML文本顺序,对同一父节点下的若干子节点进行遍历
next_sibling
返回下一个平行节点标签
previous_sibling
返回上一个平行节点标签
next_siblings
返回后面所有平行节点标签的迭代器类型
previous_siblings
返回之前所有平行节点标签的迭代器类型
三、Beautiful Soup库的格式化输出
prettify() 方法
使用prettify方法可以将一个HTML文件增加换行符,使输出时页面可读性增加
四、bs4库的使用样例
以bugku web18为例检验学习成果
题目要求在两秒内计算一个极长的算式,很明显,不可能以手算然后更改请求头的方式提交,所以使用脚本
import requests
from bs4 import BeautifulSoup
s = requests.session() #使用session保持会话不变,表达式不变
r = s.request("GET","http://114.67.246.176:10454/")
#向服务器获取页面信息
r.encoding = "utf-8"
#调用bs4获取要计算的式子并进行处理
soup = BeautifulSoup(r.text,"html.parser")
a = eval(soup.div.string[0:-3])
datas = {"value":a}
#提交
print(s.post("http://114.67.246.176:10454/",data = datas).text)
运行,成功得到flag