beautifulsoup学习记录

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的解析器同上
    html5libBeautifulSoup(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方法,它们的作用分别是取键值、向网址请求获取网页资源、获取属性值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值