码迷,mamicode.com
首页 > 其他好文 > 详细

BeautifulSoup

时间:2019-06-19 00:40:35      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:ace   -o   接收   指定位置   实现   字符串   print   ext   strip   

BeautifulSoup实现正则表达式的功能,BeautifulSoup.find(html.text, features=‘lxml‘) #features: 指定解析器

BeautifulSoup是一个模块,该模块用于接收html或xml字符串,然后将其格式化,之后可以用它提供的方法快速找到需要的元素。

BeautifulSoup使用示例

1.attr,标签属性操作

from bs4 import BeautifulSoup
from bs4.element import Tag
html_doc=‘‘‘ <html><head><title>The Dormouse‘s story</title></head> <body> <a href=‘https://www.cunzhang.com/‘>新华字典</a> <a id=‘li‘>太早</a> <p>asdf</p> <div>喜欢你</div> </body> </html> ‘‘‘

 

1 soup=BeautifulSoup(html_doc, features=html.parser) #features指定解析器
2 tag=soup.find(name=a)
3 print(tag)
4 tag.attrs[li]=绝对计划 #增加标签属性
5 print(soup)
6 del tag.attrs[li] #删除属性
7 print(soup)

2.children,所有子标签,且输出的时候“换行”也会输出,但不是标签类型

1 soup=BeautifulSoup(html_doc, features=html.parser) #features指定解析器
2 tag=soup.find(body).children
3 for i in tag:
4     if type(i)==Tag:
5         print(i,type(i))
6     else:
7         continue

3.descendants,所有子子孙孙标签

1 tag=soup.find(body).descendants #找到一个子标签时,会继续找此标签下所有的子标签,即迭代寻找
2 for i in tag:
3     if type(i)==Tag:
4         print(i,type(i))
5     else:
6         continue

4.clear, 将标签内的所有子标签清空(保留标签名)

1 soup.find(body).clear()
2 print(soup)

5.decompose,递归删除所有的标签,不保留标签名

1 soup.find(body).decompose()
2 print(soup)

6.extract,和decompose运行结果相同,但extract会有一个返回值(删除的标签)

1 tag=soup.find(body).extract()
2 print(soup)
3 print(tag)

7.decode, 编码为字符串格式,decode_contents(不含当前标签)

1 tag=soup.find(a)
2 print(tag.decode())

8.encode,编码为字节格式,encode_contents(不含当前标签)

tag=soup.find(a)
print(tag.encode())

9.find, 发现第一个标签

1 tag=soup.find(a)
2 print(tag)

10.find_all,发现所有匹配的标签

1 tag=soup.find_all(a)
2 print(tag)

11.has_attr, 检查标签是否含有该属性

1 tag=soup.find(a)
2 print(tag.has_attr(href))

12.get_text,获取标签文本内容

1 tag=soup.find(a)
2 print(tag.get_text())

13.index,检查标签在某标签的索引位置

1 tag=soup.find(div)
2 v=tag.index(tag.find(p))
3 print(v)

14.is_empty_element, 是否空标签或者自闭合标签,如‘br‘, ‘hr‘, ‘input‘等自闭合标签

1 tag=soup.find(div)
2 print(tag.is_empty_element)

15.当前的关联标签

 1 soup.next
 2 soup.next_element
 3 soup.next_elements
 4 soup.next_sibling
 5 soup.next_siblings
 6 
 7 tag.previous
 8 tag.previous_element
 9 tag.previous_elements
10 tag.previous_sibling
11 tag.previous_siblings
12 
13 tag.parent
14 tag.parents

 

 16.查找某标签的关联标签,参数合find_all标签一样

 1 tag=soup.find(div)
 2 tag.find_next(...)
 3 tag.find_all_next(...)
 4 tag.find_next_sibling(...)
 5 tag.find_next_siblings(...)
 6 
 7 tag.find_previous(...)
 8 tag.find_all_previous(...)
 9 tag.find_previous_sibling(...)
10 tag.find_previous_siblings(...)
11 
12 tag.find_parent(...)
13 tag.find_all_parent(...)

 

 17.select, select_one, CSS选择器

 1 #CSS查找格式,.select
 2 soup.select(title)
 3 soup.select(p nth-of-type(3))
 4 soup.select(body a)#与第六行区分,一个只找子代,一个找后代
 5 soup.select(html head title)#查找html下的head下的title
 6 tag=soup.select(span,a)#找到span和a标签
 7 soup.select(head > title)
 8 soup.select(p > a)
 9 soup.select(p > a:nth-of-type(2))
10 soup.select(p > #link1)
11 soup.select(body > a)
12 soup.select(#link1 ~ .sister)
13 soup.select(#link1 + .sister)

 

18.标签的内容,.string,与get_text类似,区别在于前者可以修改

1 tag=soup.find(a)
2 print(tag.string)
3 tag.string=new content
4 print(tag.string)
5 print(soup)
6 
7 tag=soup.find(body)
8 v=tag.stripped_strings#递归内部获取所有标签的文本
9 print(list(v))

 

19.append,在当前标签内部追加一个标签

 1 tag=soup.find(body)
 2 tag.append(soup.find(a))#相当于把标签剪切到其后
 3 print(soup)
 4 
 5 #自己创建一个标签并追加
 6 from bs4.element import Tag
 7 
 8 obj=Tag(name=i,attrs={id:koudai})
 9 obj.string=你是谁
10 tag=soup.find(body)
11 tag.append(obj)
12 print(soup)

 

20.insert在,在当前标签指定位置插入一个标签

1 from bs4.element import Tag
2 
3 obj=Tag(name=i,attrs={id:koudai})
4 obj.string=你是谁
5 tag=soup.find(body)
6 tag.insert(2,obj)
7 print(soup)

 

21.insert_after, insert_before,在当前标签后面或前面插入

1 from bs4.element import Tag
2 
3 obj=Tag(name=i,attrs={id:koudai})
4 obj.string=你是谁
5 tag=soup.find(body)
6 tag.insert_after(obj)
7 print(soup)

 

22.replace_with,将当前标签替换为指定标签

1 from bs4.element import Tag
2 
3 obj=Tag(name=i,attrs={id:koudai})
4 obj.string=你是谁
5 tag=soup.find(a)
6 tag.replace_with(obj)
7 print(soup)

 

23.创建标签之间的关系,但是Html文本对外不发生变化,只在查找标签的时候会起作用

1 tag=soup.find(div)
2 a=soup.find(a)
3 tag.setup(previous_sibling=a)
4 print(tag.previous_sibling)

24.wrap,将指定标签把当前标签包裹起来

1 from bs4.element import Tag
2 
3 obj=Tag(name=i,attrs={id:koudai})
4 obj.string=你是谁
5 tag=soup.find(a)
6 tag.wrap(obj)
7 print(soup)

 

25.unwrap,去掉当前标签,将保留其包裹的标签

1 from bs4.element import Tag
2 
3 obj=Tag(name=i,attrs={id:koudai})
4 obj.string=你是谁
5 tag=soup.find(a)
6 tag.wrap(obj)
7 tag.unwrap()
8 print(soup)

 

BeautifulSoup

标签:ace   -o   接收   指定位置   实现   字符串   print   ext   strip   

原文地址:https://www.cnblogs.com/czmiracle/p/11033150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!