首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

学爬虫的第48天,我打开bs4的大门,然后又被一脚踢了出来

昨天终于学会了爬取一个豆瓣网页了,按说今天该研究如何进行解析了。

但是,别急,要想解析网页,就必须得先学会传说中的 bs4 。

学之前其实还挺期待的,毕竟知道这东东是爬虫的必备。

然而学习的过程才发现,其实自己缺少了很多网页知识,比如 html、 css相关知识等。

但是现在再回去系统学网页知识工程有点大,还是先跟着这个课程学,学完看看效果再说吧。

bs4中四大对象

这东东到底是啥呢?

bs4 全称是 BeautifulSoup4,它将复杂 HTML 文档转换成一个复杂的树形结构,每个节点都是 Python 对象,所有对象可以归纳为4种:Tag、NavigableString 、BeautifulSoup、Comment 。

上面这段话,神奇的地方在于,明明每个字我都认识,但是连起来,我竟然完全看不懂。

老师说举个例子,就明白了,然后他直接用了一段 baidu.html 的代码。

最令人气愤的事情来了!

他竟然说这个文件在群里有!

喂,我知道你是在教本科生,但是好歹多多少少也考虑下我们这些屏幕前白嫖党的感受啊。

我们也想在 PyCharm 里快乐的玩耍啊!

没办法,只能老老实实看视频一点点理解吧。

一共没用几行,直接调用了 parser 方法,就解析出了百度首页的 title。

这就是上面提到4种里面的第一个 Tag ,标签及内容:将找到的第一个出现的标签及其所有内容全部拿到。

NavigableString 则是没有标签,只有标签里的内容(字符串)。

很明显,这个功能要比第一个要常用的多。

BeautifulSoup 表示整个文档的内容,可以当做是一个 Tag 对象。

Comment 表示注释,是一个特殊的NavigableString,输出的内容会不包含注释符号,这个使用频率是最低的。

文档的遍历

contents,可以获取 Tag 的所有子节点,返回一个list。

然后我们就可以用列表索引来获取它的某一个元素了。

其他还有 children(获取 Tag的所有子节点)、descendants(获取 Tag的所有子孙节点)、父节点、兄弟节点等。

完全是一种子子孙孙无穷尽也的即时感。

我都快要怀疑 Python 是愚公研究出来的了。

不过这东东了解即可,因为更多、更准确的功能,还得看 搜索功能了。

文档的搜索

搜索比遍历更为常用。

方法1:find_all ,字符串过滤,会查找与字符串完全匹配的内容。

下图就是把所有 a 标签包含的内容全都获取到了。

可以配合使用:正则表达式搜索,使用 search() 方法来匹配搜索。

下图就是将所有包含 “a”字母的标签都会显示出来。

这个东东听过好多次了,老师也把他吹嘘的够呛,期待后面对这个东东的完整学习。

还可以配合使用:传入一个函数(方法),根据函数的要求来搜索,这个方法了解即可,我估计平时应该也很少会用到。

方法2:kwargs 参数,可以给定参数进行搜索。

这里虽然仍然使用的是 find_all ,但是给定的不是规则,而是参数。

方法3:text参数,搜索文本参数。

下图是使用正则表达式,来查找包含特定文本的内容(标签里的字符串)。

方法4:limit 参数,可以对得到的信息限定个数。

css选择器:可以通过标签查找,也可以按照id 、 类名、属性等进行查找。

这次学的内容有点多,尤其是各种搜索方法,一下子全都涌入大脑,对我实行连续暴击。

不过关了视频后,仔细想想,我其实也没必要把所有方法全部掌握的,就掌握自己好用的、自己熟悉的就好了,比如 find_all 、css选择器 这俩,我估计没准就够用了。

不知道这想法对不对呢?

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200414A08CMF00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券