留意:
这里的格局只能获取这些标签的第一个,后面会讲到获取多个标签的办法。个中对于Tag有两个重要的属性name和attrs,分别表示名字和属性,介绍如下:
- name:对于Tag,它的name就是其本身,如soup.p.name就是p
- attrs是一个字典类型的,对应的是属性-值,如print soup.p.attrs,输出的就是{‘class’: [‘title’], ‘name’: ‘dromouse’},当然你也可以获得具体的值,如print soup.p.attrs[‘class’],输出的就是[title]是一个列表的类型,因为一个属性可能对应多个值,当然你也可以经由过程get办法获得属性的,如:print soup.p.get(‘class’)。还可以直接应用print soup.p[‘class’]
get
get办法用于获得标签下的属性值,留意这是一个重要的办法,在很多场合都能用到,比如你要获得<img src=http://developer.51cto.com/art/201706/”#”>标签下的图像url,那么就可以用soup.img.get(‘src’),具体解析如下:
- print soup.p.get("class") #获得第一个p标签下的src属性
经由过程类名查找
string
get_text()
获得标签下的文本内容,只有在此标签下没有子标签,或者只有一个子标签的情况下才能返回个中的内容,不然返回的是None具体实例如下:
- print soup.p.string #在膳绫擎的一段文本中p标签没有子标签,是以可以或许精确返回文本的内容
- print soup.html.string #这里获得的就是None,因为这里的html中有很多的子标签
可以获得一个标签中的所有文本内容,包含子孙节点的内容,这是最常用的办法
搜刮文档树
find_all( name , attrs , recursive , text , **kwargs )
find_all是用于搜刮节点中所有相符过滤前提的节点
1. name参数:是Tag的名字,如p,div,title …..
soup.find_all("p") 查找所有的p标签,返回的是[<b>The Dormouse's story</b>],可以经由过程遍历获取每一个节点,如下:
- ps=soup.find_all("p")
- for p in ps:
- print p.get('class') #获得p标签下的class属性
传入正则表达式:soup.find_all(re.compile(r’^b’)查找以b开首的所有标签,这里的body和b标签都邑被查到
传仁攀类列表:如不雅传入列表参数,BeautifulSoup会将与列表中任一元素匹配的内容返回.下面代码找到文档中所有<a>标签和<b>标签
- soup.find_all(["a", "b"])
2. KeyWords参数,就是传入属性和对应的属性值,或者一些其他的表达式
- soup.find_all(id='link2'),这个将会搜刮找到所有的id属性为link2的标签。传入正则表达式soup.find_all(href=http://developer.51cto.com/art/201706/re.compile("elsie")),这个将会查找所有href属性知足正则表达式的标签
- 传入多个值:soup.find_all(id='link2',class_='title') ,这个将会查找到同时知足这两个属性的标签,这里的class必须用class_传入参数,因为class是python中的关键词
- 有些属性不克不及经由过程以上办法直接搜刮,比如html5中的data-*属性,不过可以经由过程attrs参数指定一个字典参数来搜刮包含特别属性的标签,如下:
- pip install lxml
- # [<div data-foo="value">foo!</div>]
- data_soup.find_all(attrs={"data-foo": "value"}) #留意这里的atts不仅可以或许搜刮特别属性,亦可以搜刮通俗属性
- soup.find_all("p",attrs={'class':'title','id':'value'}) #相当与soup.find_all('p',class_='title'
推荐阅读
【51CTO.com原创稿件】进入2017年,记者异常明显地感到到,云办事的成长,已经成为城市之间比拼实力的重要赛道>>>详细阅读
地址:http://www.17bianji.com/lsqh/35763.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示