文档内容为本人观看北京理工大学嵩天老师公开课的听课笔记与实践总结,图片为从该课程下载资料的截图,感谢嵩老师。
Key_point:网页内容提取实际上是对标签的内容进行提取,其关键是标签的获取和标签感兴趣内容的提取。获取标签用beautifulsoup/beautifulsoup.tag.标签名称的方法,例如soup.p或者soup.body.p,soup.P.b任何标签内容的获取都可以用用tag.name/attrs等直接访问python类属性的方法。
逻辑过程:标签树→标签或者标签集合→标签内容
一、BeautifulSoup库入门
1、理解
该库的作用为:定向网络的数据爬取与网页解析。BS类是对Tag类的继承。提供了html文档到python对象的映射。可以简单地理解为BS将html封装成一个标签集合,我们可以通过标签名字来访问其包含的标签对象,例如.a、.body等,若相同标签有多个则只返回第一个。如果想全部检索,可以使用后面的find_all方法。
2、Tag基本方法
可以分为两类,分别是访问自身的方法和遍历方法。
访问自身的方法包括以下四种:
值得注意的是,本来tag.string是访问标签的字符串部分,但是实际上在有嵌套的标签中,会访问失败,返回值为空,当用于简单的标签(不含嵌套时)可以正常的使用,一种补救的方法是用.get_text()方法,但返回的是该标签内的所有文本信息,即包含被嵌套标签的string。
遍历其他标签的方法包括:下行遍历、上行遍历、平行遍历。
下行遍历:
.contents返回子标签列表,列表元素仍为tag类型。
.children返回迭代类型,不能直接访问,需要用for循环来遍历。
for child in soup.body.children:
print(child)
.decendants方法在jupyter测试时候报错,用pycharm正常,不知何故。(原来是单词拼错了)
// 子孙节点
for son in soup.body.descendants:
print(son)
上行遍历
.parent返回父(复合)标签,这个父标签支持遍历,内容是该标签的contents,实际上,实际上只要是标签就有.contents,就支持遍历。
.parents返回有tag和B