ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-05-22 19:48:13  阅读:269  来源: 互联网

标签:Beautiful Name 4.2 BeautifulSoup 多值 soup tag class 属性


找到了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('<b class="boldest">Extremely bold</b>','lxml')
 10 tag = soup.b
 11 type(tag)
 12 #<class 'bs4.element.Tag'>
 13 
 14 
 15 #TAG.NAME
 16 tag
 17 #<b class="boldest">Extremely bold</b>
 18 tag.name
 19 #'b'
 20 tag.name = 'blockquote'
 21 tag
 22 #<blockquote class="boldest">Extremely bold</blockquote>
 23 '''
 24     即tag首的'<'后和tag尾'</>'内,就是这个tag的名称.
 25     如果改变了tag的name,那将影响所有通过当前Beautiful Soup对象生成的HTML文档
 26 '''
 27 tag.name = 'b'
 28 
 29 
 30 #Attributes
 31 '''一个tag可以有多个属性。如tag <b class="boldest">,他有一个"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 # <blockquote class="verybold" id="1">Extremely bold</blockquote>
 44 
 45 del tag['class']             #属性删除
 46 del tag['id']                #属性删除
 47 tag
 48 # <blockquote>Extremely bold</blockquote>
 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('<p class="body strikeout"></p>')  #这里虽然body和strikeout只用了一个空格隔开,但其仍然会被隔开返回。(大概因为在HTML的语法里这就代表了两个属性)
 62 css_soup.p['class']
 63 # ["body", "skrikeout"]
 64 
 65 css_soup = BeautifulSoup('<p class="body"></p>')
 66 css_soup.p['class']
 67 # ["body"]             #这里虽然class的属性只有一个值,但是因为class本身是一个多值属性,故返回了list
 68 '''
 69 (接上一行注释)而如果某个属性看上去有多个值,但在任何版本的HTML定义中都没有被定义为多值属性,
 70 那么BeautifulSoup会将这个属性作为字符串返回。如下↓
 71 '''
 72 id_soup = Beautiful('<p id="my id"></p>')
 73 id_soup.p['id']
 74 # 'my id'
 75 '''
 76 将tag转换为字符串时,多值属性会合并为一个值
 77 '''
 78 rel_soup = BeautifulSoup('<p>Back to the <a rel="index">homepage</a></p>')
 79 rel_soup.a['rel']
 80 # ['index']
 81 rel_soup.a['rel'] = ['index','contents']#给a标签的rel属性添加值,转化在html里就是空格连接
 82 print(rel_soup.p)
 83 # <p>Back to the <a rel="index contents">homepage</a></p>
 84 '''
 85 如果转换的文档是XML格式,那么tag中不包含多值属性
 86 '''
 87 xml_soup = BrautifulSoup('<p class="body strikeout"></p>','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 # <class 'bs4.element.NavigableString'>
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 # <type 'unicode'>
110 '''
111 tag中包含的字符串不能编辑,但是可以被替换成其它的字符串,用replace_with()方法:
112 '''

 

标签:Beautiful,Name,4.2,BeautifulSoup,多值,soup,tag,class,属性
来源: https://www.cnblogs.com/hsh17/p/10908106.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有