美文网首页知识大爆炸
BeautifulSoup好一碗孟婆汤

BeautifulSoup好一碗孟婆汤

作者: 玉出昆冈爱姑娘 | 来源:发表于2020-11-25 21:59 被阅读0次

    图片来自风变

    一 什么是BeautifulSoup

    BeautifulSoup 是Python的第三方库,用来parse 和提取html 或xml的一种工具。我们平时使用浏览器上网,浏览器会将从服务器获取的数据翻译成我们可以看得懂的语言,爬虫做的工作也是类似。

    二 BeautifulSoup有什么用

    BeautifulSoup有两个作用:
    1)解析数据:


    d2g 01-2019325115528.png

    BS解析数据要有两个参数,第一个参数必须是字符串,第二个用来标识解析器。


    screenshot-www.pypypy.cn-2020.11.25-21_20_51.png

    其中,soup的数据类型为beautifulsoup对象。通过打印出来的源代码我们可以发现,打印soup出来的源代码和我们之前使用response.text打印出来的源代码是完全一样的。原因是:虽然response.text和soup打印出的内容表面上看长得一模一样,却有着不同的内心,它们属于不同的类:<class 'str'> 与<class 'bs4.BeautifulSoup'>。前者是字符串,后者是已经被解析过的BeautifulSoup对象。之所以打印出来的是一样的文本,是因为BeautifulSoup对象在直接打印它的时候会调用该对象内的str方法,所以直接打印 bs 对象显示字符串是str的返回结果。如果这不是一个BeautifulSoup对象,我们是没法调用相关的属性和方法。
    2)提取数据:


    crawler-l2-4-201919.png

    BeautifulSoup提取数据有两大步 find()和find_all();tag对象。
    find()与find_all()是BeautifulSoup对象的两个方法,它们可以匹配html的标签和属性,把BeautifulSoup对象里符合要求的数据都提取出来。find()只提取首个满足要求的数据。find()方法将代码从上往下找,找到符合条件的第一个数据,不管后面还有没有满足条件的其他数据,停止寻找,立即返回。find_all()顾名思义(find all:查找全部),提取出的是所有满足要求的数据。代码从上往下找,一直到代码的最后,把所有符合条件的数据揣好,一起打包返回。


    2019-01-23-16-36-57.png

    tips: 从图片可以看到, 源代码中的class属性在用find查找时,形式为class_,是为了区分python中的class类,当然,除了用class属性去匹配,还可以使用其它属性,比如style属性等。其次,括号中的参数:标签和属性可以任选其一,也可以两个一起使用,这取决于我们要在网页中提取的内容。

    通过find()和find_all()打印出来的数据含着html标签,如果要得到纯文本或者图片,还要用到tag对象。


    crawler-l2-16-201919.png

    上图是Tag对象的3种用法,Tag对象可以使用find()与find_all()来继续检索,Tag.text提出Tag对象中的文字,用Tag['href']提取出URL

    三,对象的变化过程

    2019-10-21-15-56-22.png

    我们的操作对象从URL链接到了Response对象。而这一关,我们的操作对象是这样的:Response对象——字符串——BS对象。到这里,又产生了两条分岔:一条是BS对象——Tag对象;另一条是BS对象——列表——Tag对象。

    总结

    用bs库解析数据和提取数据

    解析数据的方法是用BeautifulSoup()。

    提取数据的方法是用find()与find_all()。

    BeautifulSoup中,不止find()find_all(),还有select()也可以达到相同目的。

    其实,在bs的官方文档中,find()find_all()的方法,其实不止标签和属性两种,还有这些:

    crawler-l2-13-201919.png

    相关文章

      网友评论

        本文标题:BeautifulSoup好一碗孟婆汤

        本文链接:https://www.haomeiwen.com/subject/imhoiktx.html