标签: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)
标签:ace -o 接收 指定位置 实现 字符串 print ext strip
原文地址:https://www.cnblogs.com/czmiracle/p/11033150.html