使用python123的页面作为例子分析:
import requests
from bs4 import BeautifulSoup
url = 'https://python123.io/ws/demo.html'
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser')
print(soup.prettify)
下面是这个网页标签的输出结果
下面的soup是前面代码使用BeautifulSoup库解析之后的结果
soup.tagname
soup后面接的是标签的名字
这是表示输出这个页面的第一个title标签的内容,但是这个在一般的网页解析中比较少用,因为往往第一个也不是我们想要的,但是我们可以用在提取到了部分我们需要的标签之后再用这个方式提取我们需要的信息
tag.attrs[‘class’]
这是标签下面的方法,soup.p.attrs[‘class’],表示所有P标签里面属性名字是class的p标签,对应的class属性内容是什么
可能有多个p标签的属于都有class,但是这个函数默认是输出第一个
一个标签可以有0或多个属性,字典类型
提取标签里面的字符串:soup.a.string
目的很明确,提取a标签里面的文字获得英文的字符串,这些字符串不属于标签类型,默认也是返回第一个同名标签的内容
在一个标签里面,除了有标签,非标签字符串,还有一种标签的注释部分
Beautiful Soup库的信息提取
为了将我们得到的网页文件可读性更加强,可以调用函数:
soup.prettify()
(1)使用tag对象获得需要的内容
使用soup.a.string等属性方法等到内容数据,就是上面的一些方法
(2)使用过滤器过滤得到内容
这其实是一个find_all()函数,通过调用这个函数,得到符合条件的内容:
例子:
这样就会找多所有的p标签,返回一个由标签组成的列表
除此之外,还可以传入列表,找到多个符合要求的标签
(2)利用CSS筛选器
通过标签的属性内容来找到匹配到标签
这里id用#代表
这里的class使用.(点) 表示
除此之外,还可以输入属性的全部信息获取
组合查找:
这里的意思是找到body标签里面的所有p标签,然后输出内容
除了找到相邻的两个标签,还可以找非相邻标签的内容
这种加了大于号的写法只能查找相邻的标签
通过标签属性的内容查找对应标签内容:
但是这种方法能找到id属性名字的标签,class属性的标签找不到