返回

BeautifulSoup详解

发布时间:2023-09-11 12:01:56 150


引入BeautifulSoup:

from bs4 import BeautifulSoup
#意思就是从bs4这个包里面引入BeautifulSoup这个类

之后,使用以下语法来把请求之后的响应传入解析器:

soup = BeautifulSoup(response.text, features='lxml')

features='lxml’是一个声明解析的方式,相应的解释方式还有:
html.parse
html5lib
xml 【这个是唯一支持XML的解析器】
详细的区别请移步百度去百度相应的解释方式是什么意思。因为一般lxml就基本满足使用了。

1.访问单个标签:

print(soup.h1)#(连标签也一起返回了)

2.查找所有标签:

all_a = soup.find_all('a')
print(all_a)
#查找所有的 a 标签,返回的是一个所有a标签组成的列表

all_href = [a['href'] for a in all_a]
#循环所有a标签组成的列表 里面的 所有 a标签,
#并访问其'href'属性,这里的访问规则就像是访问字典一样。
print('\n', all_href) #返回所有的href属性的值组成的列表

其实BeautifulSoup能做的事情可多着呢
例如:

soup = BeautifulSoup(response.text, features='lxml')
month = soup.find_all('li',{"class" : "month"})#访问所有 含有"month"的class属性的li标签,返回满足条件的所有li标签组成的列表。
for m in month:
print(m.get_text()) #get_text()获取标签的文字内容【字符串内容、值【不是属性的值】】

#或者
month = soup.find_all(class_= "month"})

BeautifulSoup还能在一棵树中多次使用,意思就是相当于一个循环的作用。

jan = soup.find('ul', {"class": 'jan'})
#查找class属性值为jan的标签内的所有内容组成的XML树
d_jan = jan.find_all('li') #使用前面返回的结果列表作为父亲(作为这一次的Tag对象),返回所有'li'标签组成的列表
for d in d_jan:#遍历这个li标签组成的列表,寻找所需要信息
print(d.get_text())

BeautifulSoup属性查找

soup = BeautifulSoup(response.text,'lxml')
print(soup.find_all(attrs={'id':'list-1'})) #查找id为list-1的标签包含的所有标签,id也可以换成其它属性

#此外,soup.find_all()直接支持id以及class的快捷查找
soup.find_all(id = 'idvalues')
soup.find_all(class_ = 'classvalues')

当BeautifulSoup遇上正则表达式

soup = BeautifulSoup(htmlre, features='lxml')

#find_all函数的第一个参数填入标签,第二个参数填入具体找的东西【很多时候填入属性和值,也有时候需要用正则表达式】
img_links = soup.find_all("img", {"src": re.compile('.*?\.jpg')})
for link in img_links: #遍历获取到的图片链接组成的列表
print(link['src'])

经历了find()和find_all()方法,下面接触CSS选择器【BeautifulSoup的select()方法】
一个例子:

html = '''




Test




Good happy





  • Foo

  • Bar

  • Lay



  • Foo

  • Bar







'''

1.对于class 语法: .class属性的值 返回列表(严肃点这是一个bs4.element.Tag)

print(soup.select('.panel .panel-heading'))
#根据CSS来选择,选择class='panel'下的class='panel-heading'的标签里包含的所有标签,包含他本身,组成的列表

print(soup.select('ul li')) #选择并返回所有的ul、li标签组成的列表

2.对于id 语法:#id属性的值 返回列表

print(soup.select('#list-1')) #选择id=list-1 里面的所有标签以及他本身
print(soup.select('#list-1 .element')) #选择id=list-1下的class属性值为element 里面的所有标签以及他本身

3.获取属性的值

for ul in soup.select('ul'):
print(ul['id'])#获取ul的id属性的值
print(ul.attrs['id']) #或者attrs获取属性的值

4.获取标签的内容

for ul in soup.select('li'):
print(ul.get_text()) #获取string里面的string

欢迎加入QQ群一起学习和交流,只为学习和交流:275259334

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线