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