Beautiful Soup 4.2.0 doc_tag、Name、Attributes、多值属性

找到了bs4的中文文档,对昨天爬虫程序里所涉及的bs4库进行学习。这篇代码涉及到tag、Name、Attributes以及多值属性。

  1 '''
  2 对象的种类
  3 Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象。
  4 所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment 。
  5 '''
  6 
  7 from bs4 import BeautifulSoup
  8 
  9 soup = BeautifulSoup('Extremely bold','lxml')
 10 tag = soup.b
 11 type(tag)
 12 #
 13 
 14 
 15 #TAG.NAME
 16 tag
 17 #Extremely bold
 18 tag.name
 19 #'b'
 20 tag.name = 'blockquote'
 21 tag
 22 #
Extremely bold
23 ''' 24 即tag首的'<'后和tag尾''内,就是这个tag的名称. 25 如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档 26 ''' 27 tag.name = 'b' 28 29 30 #Attributes 31 '''一个tag可以有多个属性。如tag ,他有一个"class"属性,值为"boldest"。''' 32 #tag属性的操作方法与字典相同。 33 tag['class'] 34 # u'boldest' 35 tag.attrs #“点”取属性 36 # {u'class':u'boldest'} 37 ''' 38 tag的属性可以被添加、删除或修改。tag的属性操作方法与字典一样。 39 ''' 40 tag['class'] = 'verybold' #属性查看 41 tag['id'] = 1 #属性查看 42 tag 43 #
Extremely bold
44 45 del tag['class'] #属性删除 46 del tag['id'] #属性删除 47 tag 48 #
Extremely bold
49 50 tag['class'] #删除属性后查看,报错 51 # KeyError: 'class' 52 print(tag.get('class')) 53 # None 54 55 56 #多值属性 57 ''' 58 最常见的多值属性是class,还有一些多值属性如 rel, rev, accept-charset, headers,accesskey等。 59 多值属性在 BeautifulSoup 中的返回类型是list: 60 ''' 61 css_soup = BeautifulSoup('

') #这里虽然body和strikeout只用了一个空格隔开,但其仍然会被隔开返回。(大概因为在HTML的语法里这就代表了两个属性) 62 css_soup.p['class'] 63 # ["body", "skrikeout"] 64 65 css_soup = BeautifulSoup('

') 66 css_soup.p['class'] 67 # ["body"] #这里虽然class的属性只有一个值,但是因为class本身是一个多值属性,故返回了list 68 ''' 69 (接上一行注释)而如果某个属性看上去有多个值,但在任何版本的HTML定义中都没有被定义为多值属性, 70 那么BeautifulSoup会将这个属性作为字符串返回。如下↓ 71 ''' 72 id_soup = Beautiful('

') 73 id_soup.p['id'] 74 # 'my id' 75 ''' 76 将tag转换为字符串时,多值属性会合并为一个值 77 ''' 78 rel_soup = BeautifulSoup('

Back to the homepage

') 79 rel_soup.a['rel'] 80 # ['index'] 81 rel_soup.a['rel'] = ['index','contents']#给a标签的rel属性添加值,转化在html里就是空格连接 82 print(rel_soup.p) 83 #

Back to the homepage

84 ''' 85 如果转换的文档是XML格式,那么tag中不包含多值属性 86 ''' 87 xml_soup = BrautifulSoup('

','xml')#lxml有多值属性,xml没有 88 xml_soup.p['class'] #xml里的class属性值输出出来仍然是(如非多值属性的)字符串形式,而非列表 89 # u'body strikeout' 90 91 92 #可以遍历的字符串 93 ''' 94 字符串常被包含在tag内,BeautifulSoup用 NavigableString 类来包装tag中的字符串: 95 ''' 96 tag.string 97 # u'Extremely bold' 98 type(tag.string) 99 # 100 ''' 101 一个 NavigableString 字符串与Python中的Unicode字符串相同, 102 并且还支持包含在遍历文档树和搜索文档树中的一些特性, 103 通过unicode()方法可以直接将 NavigableString 对象转换成 Unicode 字符串: 104 ''' 105 unicode_string = unicode(tag.string) 106 unicode_string 107 # u'Extremely bold' 108 type(unicode_string) 109 # 110 ''' 111 tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用replace_with()方法: 112 '''

 

你可能感兴趣的:(Beautiful Soup 4.2.0 doc_tag、Name、Attributes、多值属性)