Python爬虫学习纪要(一):BeautifulSoup相关知识点

来源:互联网 发布:网络高清解码器 编辑:程序博客网 时间:2024/06/04 19:24
一、BeautifulSoup对象:
1)Tag:Tag就是html文件中的标签以及标签之间的内容(注:如果得到的是'bs4.element.Tag'类型的对象可以继续进行后续的);
2)NavigableString:由.String方法得到(注:类型为bs4.element.NavigableString);
3)BeautifulSoup:一个文档的全部内容(注:一个特殊的Tag);
4)Comment:它是NavigableString类型的一个子类。

1.Tag介绍:
1.1 .name:Tag对象的.name方法得到该Tag的标签本身名称。
# print(soup.title.name)
1.2 .attrs:Tag对象的.attrs将得到标签中所有属性的字典。
# print(soup.p.attrs)
1.3 其它操作:如修改、删除、读取等。
# print(soup.p['class'])
# print(soup.p.get('class'))
# soup.p['class'] = 'newClass'
# del soup.p['class']

2、NavigableString介绍:
# print(soup.p.string)
# print(type(soup.p.string))

3、BeautifulSoup介绍:
# print(type(soup.name))
# print(soup.name)
# print(soup.attrs)

4、Comment介绍:和CData,ProcessingInstruction,Declaration,Doctype一样,它是NavigableString类型的一个子类。

二、树的遍历:
子孙节点、父亲节点、兄弟节点、前后节点、节点内容。
2.1、子孙节点:
1).content:
# print(soup.head.contents)
# print(soup.head.content[0])

2).children:
可得到一个子节点的迭代器,可以遍历其中的元素。
# for child in soup.body.children:
      print(child)

3).descendants:
与.content和.children只得到直接子节点不同,.descendants能对所有子孙节点迭代循环,将标签层层剥离得到所有子节点,同样通过遍历的方法得到每个子孙节点。
# for child in soup.descendants:
      print(child)

2.2、父亲节点:
1).parent:得到其直接父节点
2).parents:得到元素的所有父节点
# contnet = soup.head.title.string
  for parent in content.parents:
      print(parent.name)

2.3、兄弟节点:
1).next_sibling和.next_siblings:
前者得到Tag对象平级的下一个节点,如果不存在则返回None;后者得到Tag对象平级的下面所有兄弟节点。
2).previous_sibling和.previous_siblings:
前者到Tag对象平级的上一个节点,如果不存在则返回None;后者得到Tag对象平级的上面所有兄弟节点。(注:由于在HTML文档中的空白和换行也被视作是一个节点,所以可能得到的兄弟节点(或者子节点父节点)会是空白类型或者字符串类型而不是Tag。)

2.4、前后节点:
1).next_element和.next_elements:
 与 .next_sibling和.next_siblings 不同,它并不是针对于兄弟节点,而是在所有节点,不分层次得到下一个节点和所有的后续节点。.next_elements的结果通过遍历访问。
2).previous_element和.previous_elements:
这两个方法将不分层次得到上一个节点和所有之前的节点。.previous_elements的结果通过遍历访问。

2.5、节点内容:
1).string:(注:如果Tag包含了多个子节点,Tag就无法确定.string 方法应该调用哪个子节点的内容,输出结果是 None)
# print(soup.head.string)

2).strings和.stripped_strings:当一个Tag对象有多个子节点时,可以用.strings方法再通过遍历获得所有子节点的内容。
# for string in soup.strings:
      print(repr(string))

3).get_text():如果你仅仅想要得到文档或者标签的文本部分,可以使用.get_text()方法
阅读全文
0 0
原创粉丝点击