首页 > 其他分享 >beautifulsoup学习记录

beautifulsoup学习记录

时间:2023-08-01 17:44:57浏览次数:33  
标签:记录 class get BeautifulSoup beautifulsoup 学习 soup 方法 find

BeautifulSoup库总结

1、BeautifulSoup库作用

2、BeautifulSoup()方法

3、find()、find_all()、selector()、get()方法



1、BeautifulSoup库作用


  • 用于将爬取到的网页源码(用requests库完成)解析为soup文档,这样做的好处是可以再用BeautifulSoup库中的过滤函数(方法)过滤提取数据

2、BeautifulSoup()方法

  • 基本用法:

    from bs4 import BeautifulSouop

    soup = BeautifulSoup(res.text,'html.parser')

    这里res是用request的get方法得到的数据,这里暂时省略。


    print(soup.prettify())


    BeautifulSoup方法将res.text(注意要是text格式)解析成标准的html缩进格式数据放入变量'soup'中,这时'soup'是一个soup对象,可以使用BeautifulSoup库的其他方法来提取想要的内容具体看下面的方法。

    BeautifulSoup支持的解析器如下:
    解析器名 使用方法 优点 缺点
    Python标准库 BeautifulSoup(markup,"html.parser") Python内置,速度适中,文档容错能力强 旧版本存在容错能力差的情况
    lxml HTML解析器 BeautifulSoup(markup,"lxml") 速度快,文档容错能力强;(推荐) 需要安装C库
    Lxml XML解析器 BeautifulSoup(markup,"xml") 速度快,唯一支持XML的解析器 同上
    html5lib BeautifulSoup(markup,"html5lib") 容错性最好,以浏览器方式解析文档,生成HTML5格式的文档 速度慢

3、find()、find_all()、selector()、get()方法


  • find_all()方法




    soup.find_all('div',"item")

    查找div标签,class = "item"


    soup.find_all('div',class = 'item') #结果和前一句一样
    soup.find_all('div',attrs = {"class":"item"}) #attrs参数定义一个字典参数来搜索包含特殊属性的tag

    find_all()方法搜索当前soup对象的所有tag子节点(soup对象就是由各种html节点构成的)并判断是否符合过滤器的条件:
    find_all(name,attrs/class,recursive,string,**kwargs)
    name参数可以查找所有标签名为name的tag

    1、字符串对象自动忽略掉

    例:soup.find_all("title")


    1.2、多标签搜索

    例:soup.find_all(name = ['div','p'])



    2、基于标签属性查找如:attrs/class_/id/title/...


    2.1、通用方式属性搜索——attrs

    soup.find_all(attrs = {'data-custom':'custom'})


    2.2、css类名搜索——class_ (注意下划线)

    通过class_参数搜索由指定css类名的tag(可简写):

    soup.find_all("a","sister")#class_ = "sister"



    若tag的class属性是多值属性,按照css类名搜索tag时,可以分别搜索tag中的每个css类名:

    例如:

    CSS_soup = BeautifulSoup('<p class = "body strikeout">

    ')


    CSS_soup.find_all("p",class_ = "strikeout") #<p class = "body strikeout">




    CSS_soup.find_all("p",class_ = "body")




    也可以通过CSS值完全匹配来查找




    3、string


    3.1、搜索文档中的字符串内容,string参数接受字符串,正则表达式,列表,True。



    3.2、与其他参数混合过滤

    soup.find_all("a",string = "Else")

    soup的内容为:[<a href = "http..." class = "sister">Else]





    4、限定直接子节点——recursive

    加入参数recursive = False 则会只搜索tag的直接子节点


  • selector方法

    soup.select('div.item > a > h1')

    要加单引号,括号内容可以通过浏览器复制得到(鼠标右键目标内容然后点击copy selector


    !!!li:nth-child(1)需要改为li:nth-of-type(1)

    需要注意这种方法得到的结果是会带有标签的,使用get_text()方法即可获得其中的文本内容
    即在使用完select后再soup2 = soup.get_text().strip()

    补充:
    strip()函数是用于移除字符串开头和末尾的指定字符(默认为空格)或字符序列的方法。下面是使用strip()函数的基本语法:

    string.strip([characters])
    其中,string是要操作的字符串,characters是可选参数,用于指定要移除的字符或字符序列。

    下面是一些示例:

    移除字符串开头和末尾的空格:


    s = " Hello, World! "

    print(s.strip()) # 输出: "Hello, World!"

    移除字符串开头和末尾的指定字符:

    s = "Hello, World!"

    print(s.strip("*")) # 输出: "Hello, World!"

    移除字符串开头和末尾的多个指定字符序列:

    s = "~Hello,World~~~"

    print(s.strip("~")) # 输出: "Hello, World!"

    需要注意的是,strip()函数返回一个新的字符串,并不会修改原始字符串。如果想要移除字符串中间的字符,可以考虑使用其他字符串处理方法,比如replace()函数或正则表达式等。




  • get()方法





    BeautifulSoup解析得到的soup对象有一个get()方法。该方法用于获取标签(HTML元素)的属性值。
    使用get()方法时,你需要传递属性名作为参数。如果该属性存在,get()方法将返回对应的属性值;如果属性不存在,get()方法可以返回默认值(可选参数)或者None。





    注意区分字典、requests库和beautifulsoup库中的get方法,它们的作用分别是取键值、向网址请求获取网页资源、获取属性值。

标签:记录,class,get,BeautifulSoup,beautifulsoup,学习,soup,方法,find
From: https://www.cnblogs.com/littlejazzcat/p/17598590.html

相关文章

  • js如何实现对象数组的深度复制 记录记录
    背景:偶然发现的bug,列表页做多选的时候,做了一次数据格式的转换consttemp=me.multipleSelection;temp.forEach(p=>{p.trainTicketType=p.trainTicketType.split(',');requestList.push(p);})此时如果......
  • RASP知识学习笔记
    RASPRASP(Runtimeapplicationself-protection)是一种内置或链接到应用程序环境中的安全技术,与应用程序融为一体,实时监测、阻断攻击,使程序自身拥有自我保护的能力。工作原理RASP技术是一种基于服务器的技术,一旦应用程序运行开始时就会激活。而且,所有RASP产品都包含一个运行时监......
  • 关于菜鸡学习RHEL8的一些小笔记--->LVM逻辑卷
    LVM基础概念:LVM()逻辑卷管理器,主要适用于对Linux环境下面磁盘分区的管理机制在真实的场景中,服务器使用的越久,所产生的数据量就会越来越大,导致硬盘本身空间越来越小;这里针对分区来看,如果想要扩大容量,就得重新挂载硬盘,然后去做数据迁移,这样就会直接导致业务停止运行;#这里分区的大小是在......
  • 学习Java的第11天
    运算符算数运算符:+,-,*,/,%,++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>(了解!!!)条件运算符?:扩展赋值运算符:+=,-=,*=,/=packageoperator;publicclassDemo03{publicstaticv......
  • 深度学习-->卷积神经网络
    二维卷积层: frommxnetimportautograd,ndfrommxnet.gluonimportnn#定义函数corr2d,用于实现二维卷积操作defcorr2d(x,k):#获取卷积核的高度和宽度h,w=k.shape#初始化输出y,其形状为(x.shape[0]-h+1,x.shape[1]-w+1)y=nd.ze......
  • 【学习笔记】记忆化搜索
    记忆化搜索目录前置知识:概念:实现:oiwiki:记忆化搜索建议搭配食用。前置知识:深度优先搜索DFS概念:搜索通常通过递归来实现,但是递归过程中往往有很多结果被重复计算,因此降低了搜索的效率。因此记忆化搜索就是再递归的过程中记录已经遍历过的状态与结果,用到的时候再直接取出......
  • Flutter学习之视图体系
    一、前言Flutter是一种全新的响应式跨平台的移动开发框架,越来越多的开发者参与学习或者研究中,确实在iOS和Android平台上能够用一套代码构建出性能比较高的应用程序。我刚开始接触FlutterFlutter中文网看到这么一句话:Widget是Flutter应用程序用户界面的基本构建块。每个Widget都是用......
  • MLOps学习记录
    MLOps是一种机器学习工程文化,基于MLOps的机器学习系统需要具备持续集成(CI)、持续交付(CD)、持续训练(CT)等能力。MLOps和DevOps区别?持续集成(CI)在传统单元测试、集成测试上,还需要基于验证数据进行模型质量评估。持续交付(CD)交付的不是一个软件或服务,而是一个模型,并将其......
  • Android学习系列(39)--Android主题和样式之系统篇(上)
    Android学习系列(39)--Android主题和样式之系统篇(上)【基于最新的Android4.4的源码分析】每家公司或者每个移动团队无不想开发出一套自己的UI框架,融入自己的设计和特性,这必然会去修改android的ui。所以,学习和理解android的UI设计是最基础和非常有必要的。androidui设计最重要的就是......
  • 最小割树 学习笔记
    问题描述给定一张图,求任意两点的最小割。要求跑\(n\)次最大流。做法暴力需要跑\(n^2\)次最大流,然而这样很浪费,因为求出\(u,v\)两点的最小割以后,我们还获得了至少一种最小割方案,可以通过这一方案获得更多信息。注意到假设通过最小割断开后,\(s,t\)所在集合分别为\(S,T......