数据解析:Beautiful Soup的使用4,知识点补充

html = """
HTML文档
"""


from bs4 import BeautifulSoup


'''Teg和BeautifulSoup'''
soup = BeautifulSoup(html, 'lxml')
# BeautifulSoup是Tag经过更深层次的封装,里面有很多方法(创建、插入、删除标签等),但是一般用的不多,只是用它来创建个对象,然后再经过创建的对象来查询匹配
print(type(soup))    #    就是from bs4 import BeautifulSoup这个模块  继承自Tag

table = soup.find('table')
print(type(table))            #   =>  from bs4.element import Tag

table.find_all('tr')
# soup、table 都可以使用 find_all、find等一些方法   因为BeautifulSoup find find_all都是继承自Tag
# BeautifulSoup继承自Tag  ->  soup = BeautifulSoup(html, 'lxml')  ->  table = soup.find('table')  ->  table.find_all('tr')
# 这样一层一层继承,一层一层的调用,soup能调用的方法 table都能继承了


'''NavigableString'''
div = soup.find('div')
print(type(div.string))        # 
from bs4.element import NavigableString     # 本质上就是Python内置的str加了一些其他的东西


'''注释字符串 Comment'''
p = soup.find('p')
print(p.string)     # 用.string可以获取到一个注释的字符串,多行文本获取不到,只要有换行就获取不到
print(p.contents)   # 用.contents可以查看获取到的所有字符串,这里可以看到是有换行符的

print(type(p.string))   # 
from bs4.element import Comment    # 继承自NavigableString的


'''contents和children'''
div2 = soup.find('div')
print(type(div2.contents))
print(div2.contents)        # 返回的是个列表

print(type(div2.children))
print(div2.children)        # 返回的是个迭代器   

'''两个都可以通过遍历来获取到匹配到的内容'''

总结:

四个常用的对象:

Beautiful Soup将复杂的HTML文档转换成一个复杂的树形结构,每个节点都是Python对象

所有对象可以归纳为四种:

  1. Tag:BeautifulSoup中所有的标签都是Tag类型,并且BeautifulSoup的对象本质上也是一个Tag类型,所以find、find_all…这些方法并不是BeautifulSoup的,而是继承自Tag的
  2. NavigableString:继承自Python中的str,用起来跟使用Python的str区别不大
  3. BeautifulSoup:继承自Tag,用来生成BeautifulSoup树的,对于一些查找方法,如:find、find_all、seIect等,其实还是来自于Tag类的
  4. Comment:继承自NavigableString

contents和children:

返回某个标签下的直接子元素,包括字符串和空白字符。区别:contents返回一个列表,children返回的是迭代器

你可能感兴趣的:(网络爬虫,python,js,web,html,java)