python爬虫之bs4库_python爬虫之bs4 美丽汤

本文介绍了BeautifulSoup4这个强大的网页解析库,它支持多种解析器,无需正则表达式即可方便地提取网页内容。通过案例展示了如何查找并遍历img和a标签,获取图片地址和链接文本,以及使用类名和ID查找特定属性的标签。此外,还演示了标签的层级关系、属性获取、平行遍历和find_all方法的使用,帮助读者深入理解网页解析技巧。
摘要由CSDN通过智能技术生成

beautifulsoup4

灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。

10475064.html

使用方法:

案例代码展示可不看

import requests

from bs4 import *

import re

urls='https://www.dbmeinv.com/' #这是一个urls地址

res=requests.get(urls) #获取网页内容

t=res.text #网页 内容以文本形式赋值给t

#匹配图片地址的正则

# needs=r'https://wx.*?jpg'

# pattern = re.compile(needs)

# need= pattern.findall(t)

#获取标签内容和图片的地址的代码

soup = BeautifulSoup(t,'lxml') # 解析器为lxml

list_img=soup.find('img') #寻找所有的img标签

print(type(list_img[0])) #获取src属性即 图片的唯一地址

print(list_img[0].get('src'))

for img_src in list_img:

print(img_src.get('src')) #遍历图片的地址

list_url=soup.find_all('a') #寻找所有的a标签

print(type(list_url[0]))

print(list_url[0].get('href'))

for img_url in list_img:

print(img_url.get_text()) #获取a标签中的文本内容

soup=BeautifulSoup(t,'html.parser')

print(soup.find_all('a',class_='sister'))#class是特殊属性,因为class是关键字

print(soup.find_all('a',id='link3'))#用于查找有特定属性的标签

sibling_soup = BeautifulSoup("text1text2", 'html.parser')

print(sibling_soup)

print(sibling_soup.find('b',id='bbb')) #获取id为bbb的标签

print(sibling_soup.find('b',id='bbb').next_sibling) #获取id为bbb的标签的下一个b标签

****

使用BeatuifulSoup

引用 BeatuifulSoup

最常用的引用方式

Ps:B S需要大写

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(“

data

”,‘html.parser’)

#两个参数 一个是需要解析的内容 一个是解析器

Soup=BeautifulSoup( open(path,”html.parser”))

BeatuifulSoup 基本元素

标签的认识可以参考html

10475064.html

10475064.html

属性的应用

Demo是一个respose.text

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.title)

#打印出页面的title包含闭合标签的内容

Tag=soup.a

Print(Tag)#打印a标签的内容包括各种属性

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Soup.a.name #获取a标签的名字

Soup.a.parent.name #霸霸

Soup.a.parent.parent.name #霸霸的霸霸

#对于一个标签可以使用.name的方式获得他的名字 返回的是一个字符串形式

Tag=soup.a

Print(Tag.attrs)

#返回标签的属性 是一个字典格式

#对信息的提取

Tag.attrs[‘class’] #获取class的值

Tag.attrs[“href”]# 获取href属性

#Tag的类型 是一个bs4种的一个内置类型

Soup.a.string #a标签内容的属性

#可以跨越多个标签层次即:无视标签内容含有的标签

当标签内容中含有注释的时候

Soup.b.string 会正常打印标签内容无视注释效果

可通过类型判断

Print(type(“Soup.b.string”))

Print(type(“Soup.b.string”))

#基于bs4库中的htm库的遍历方法

10475064.html

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.head)获取head标签

print(Soup.head.contents) #head标签中的儿子标签是title标签

#返回的内容是一个列表

print(Soup.body.contents)#获取body的儿子标签

Print(len(Soup.body.contents)) #获取body标签的儿子标签的数量

Ps:子节点不知包括标签 甚至一些’\n’之类的换行符都可以是子节点

可通过列表类型的下表来检索其中的内容

Soup.body.contents[1] #获取第二个元素

#也可以通过for循环遍历

10475064.html

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.title.parent) #打印出title标签的霸霸

print(Soup.html.parent)#html 标签是doc中的最高级标签他的霸霸是他自己包含其中自己的全部内容

print(Soup.parent)#soup本身没有霸霸

这里插入一个方法

Soup.prettify()

#这个方法就是在每个标签后加入一个\n

打印出来是十分规范的h5代码 一目了然

也可以对某个标签做格式化处理

Print(Soup.a.prettify())

会发现标签内容被漂亮的打印出来

10475064.html

标签树的平行遍历是有条件的

Ps:平行遍历发生在同一父节点的各节点间

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.a.next_sibling) #打印出a标签的下一个平行标签

#这里打印出一个’and’类型于之前提到过的’\n’

Print(Soup.a.next_sibling.next_sibling)#打印出a标签的下一个平行标签的下一个平行标签

print(Soup.a.previous)#打印出的是一段文本解释a标签之前的信息

#同时也可以打印出a标签的前前平行标签的信息

print(Soup.a.previous.previous)

10475064.html

find_all方法

Soup.find_all(“a”) #查找所有的a标签

#同时查找a,b标签

Soup.find_all([“a”,”b”])#作为一个列表形式

for tag in Soup.find_all(True):

Print(tag.name)

会打印出所有的标签

Soup.find_all(“p”,”course”) #返回带有course属性值的所有p标签 (列表)

Soup.find_all(id=link1) #查找id属性为link1的标签元素 (列表)

如果没有会返回一个空列表

10475064.html

10475064.html

beautifulsoup4

灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。

10475064.html

使用方法:

案例代码展示可不看

import requests

from bs4 import *

import re

urls='https://www.dbmeinv.com/' #这是一个urls地址

res=requests.get(urls) #获取网页内容

t=res.text #网页 内容以文本形式赋值给t

#匹配图片地址的正则

# needs=r'https://wx.*?jpg'

# pattern = re.compile(needs)

# need= pattern.findall(t)

#获取标签内容和图片的地址的代码

soup = BeautifulSoup(t,'lxml') # 解析器为lxml

list_img=soup.find('img') #寻找所有的img标签

print(type(list_img[0])) #获取src属性即 图片的唯一地址

print(list_img[0].get('src'))

for img_src in list_img:

print(img_src.get('src')) #遍历图片的地址

list_url=soup.find_all('a') #寻找所有的a标签

print(type(list_url[0]))

print(list_url[0].get('href'))

for img_url in list_img:

print(img_url.get_text()) #获取a标签中的文本内容

soup=BeautifulSoup(t,'html.parser')

print(soup.find_all('a',class_='sister'))#class是特殊属性,因为class是关键字

print(soup.find_all('a',id='link3'))#用于查找有特定属性的标签

sibling_soup = BeautifulSoup("text1text2", 'html.parser')

print(sibling_soup)

print(sibling_soup.find('b',id='bbb')) #获取id为bbb的标签

print(sibling_soup.find('b',id='bbb').next_sibling) #获取id为bbb的标签的下一个b标签

****

使用BeatuifulSoup

引用 BeatuifulSoup

最常用的引用方式

Ps:B S需要大写

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(“

data

”,‘html.parser’)

#两个参数 一个是需要解析的内容 一个是解析器

Soup=BeautifulSoup( open(path,”html.parser”))

BeatuifulSoup 基本元素

标签的认识可以参考html

10475064.html

10475064.html

属性的应用

Demo是一个respose.text

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.title)

#打印出页面的title包含闭合标签的内容

Tag=soup.a

Print(Tag)#打印a标签的内容包括各种属性

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Soup.a.name #获取a标签的名字

Soup.a.parent.name #霸霸

Soup.a.parent.parent.name #霸霸的霸霸

#对于一个标签可以使用.name的方式获得他的名字 返回的是一个字符串形式

Tag=soup.a

Print(Tag.attrs)

#返回标签的属性 是一个字典格式

#对信息的提取

Tag.attrs[‘class’] #获取class的值

Tag.attrs[“href”]# 获取href属性

#Tag的类型 是一个bs4种的一个内置类型

Soup.a.string #a标签内容的属性

#可以跨越多个标签层次即:无视标签内容含有的标签

当标签内容中含有注释的时候

Soup.b.string 会正常打印标签内容无视注释效果

可通过类型判断

Print(type(“Soup.b.string”))

Print(type(“Soup.b.string”))

#基于bs4库中的htm库的遍历方法

10475064.html

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.head)获取head标签

print(Soup.head.contents) #head标签中的儿子标签是title标签

#返回的内容是一个列表

print(Soup.body.contents)#获取body的儿子标签

Print(len(Soup.body.contents)) #获取body标签的儿子标签的数量

Ps:子节点不知包括标签 甚至一些’\n’之类的换行符都可以是子节点

可通过列表类型的下表来检索其中的内容

Soup.body.contents[1] #获取第二个元素

#也可以通过for循环遍历

10475064.html

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.title.parent) #打印出title标签的霸霸

print(Soup.html.parent)#html 标签是doc中的最高级标签他的霸霸是他自己包含其中自己的全部内容

print(Soup.parent)#soup本身没有霸霸

这里插入一个方法

Soup.prettify()

#这个方法就是在每个标签后加入一个\n

打印出来是十分规范的h5代码 一目了然

也可以对某个标签做格式化处理

Print(Soup.a.prettify())

会发现标签内容被漂亮的打印出来

10475064.html

标签树的平行遍历是有条件的

Ps:平行遍历发生在同一父节点的各节点间

from bs4 import BeatuifulSoup

Soup = BeatuifulSoup(demo,””html.parser)

Print(Soup.a.next_sibling) #打印出a标签的下一个平行标签

#这里打印出一个’and’类型于之前提到过的’\n’

Print(Soup.a.next_sibling.next_sibling)#打印出a标签的下一个平行标签的下一个平行标签

print(Soup.a.previous)#打印出的是一段文本解释a标签之前的信息

#同时也可以打印出a标签的前前平行标签的信息

print(Soup.a.previous.previous)

10475064.html

find_all方法

Soup.find_all(“a”) #查找所有的a标签

#同时查找a,b标签

Soup.find_all([“a”,”b”])#作为一个列表形式

for tag in Soup.find_all(True):

Print(tag.name)

会打印出所有的标签

Soup.find_all(“p”,”course”) #返回带有course属性值的所有p标签 (列表)

Soup.find_all(id=link1) #查找id属性为link1的标签元素 (列表)

如果没有会返回一个空列表

10475064.html

10475064.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值