概述
beautifulsoup4
灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。
使用方法:
案例代码展示可不看
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("<a><b id='bbb'>text1</b><b>text2</b></b></a>", '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(“<p>data</p>” , ‘html.parser’)
#两个参数 一个是需要解析的内容 一个是解析器
Soup=BeautifulSoup( open(path,”html.parser”))
BeatuifulSoup 基本元素
标签的认识可以参考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库的遍历方法
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循环遍历
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())
会发现标签内容被漂亮的打印出来
标签树的平行遍历是有条件的
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)
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的标签元素 (列表)
如果没有会返回一个空列表
beautifulsoup4
灵活又方便的网页解析库,处理高效,支持多种解析器。利用它不用编写正则表达式即可方便地实现网页的提取。
使用方法:
案例代码展示可不看
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("<a><b id='bbb'>text1</b><b>text2</b></b></a>", '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(“<p>data</p>” , ‘html.parser’)
#两个参数 一个是需要解析的内容 一个是解析器
Soup=BeautifulSoup( open(path,”html.parser”))
BeatuifulSoup 基本元素
标签的认识可以参考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库的遍历方法
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循环遍历
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())
会发现标签内容被漂亮的打印出来
标签树的平行遍历是有条件的
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)
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的标签元素 (列表)
如果没有会返回一个空列表
转载于:https://www.cnblogs.com/pythonyeyu/p/10475064.html
最后
以上就是刻苦西装为你收集整理的python爬虫之bs4 美丽汤的全部内容,希望文章能够帮你解决python爬虫之bs4 美丽汤所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复