昨天终于学会了爬取一个豆瓣网页了,按说今天该研究如何进行解析了。
但是,别急,要想解析网页,就必须得先学会传说中的 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选择器 这俩,我估计没准就够用了。
不知道这想法对不对呢?
领取专属 10元无门槛券
私享最新 技术干货