Python BeautifulSoup网页自动化处理技巧
- 解析HTML/XML文档
使用BeautifulSoup库的核心功能是可以解析HTML/XML文档,将其转换成Python可以操作的对象,方便对文档中的内容进行处理。解析文档可以使用BeautifulSoup类的构造方法,如下所示:
from bs4 import BeautifulSoup html_doc = """ <html> <head> <title>pidancode.com</title> </head> <body> <div class="container"> <h1>皮蛋编程</h1> <p>欢迎来到皮蛋编程的世界!</p> <ul class="list"> <li><a href="http://www.baidu.com">百度搜索</a></li> <li><a href="http://www.google.com">谷歌搜索</a></li> <li><a href="http://www.bing.com">必应搜索</a></li> </ul> </div> </body> </html> """ soup = BeautifulSoup(html_doc, 'html.parser')
- 获取标签元素
使用BeautifulSoup库可以很方便地获取标签元素及其属性值,常用的方法包括:find()、find_all()、select()。其中,find()方法用于获取第一个符合条件的标签元素,find_all()方法用于获取所有符合条件的标签元素,select()方法用于利用CSS选择器获取标签元素。
下面给出几个使用示例:
# 获取第一个ul元素 ul = soup.find('ul') # 获取所有a标签元素 a_list = soup.find_all('a') # 获取ul标签元素下的所有li元素 li_list = ul.find_all('li') # 获取class为list的ul元素 ul_list = soup.select('ul.list')
- 获取元素的属性值
BeautifulSoup库可以很方便地获取标签元素的属性值,使用方法类似于字典取值方式,下面给出一个示例:
# 获取第一个a标签元素的href属性值 a_href = a_list[0]['href'] # 获取class为list的ul元素的class属性值 ul_class = ul_list[0]['class']
- 操作元素的内容
使用BeautifulSoup库可以对标签元素的内容进行操作,常用的方法包括:get_text()、string、replace_with()。
其中,get_text()方法可以获取标签元素的文本内容(去除HTML标签),string属性可以获取标签元素的文本内容(不去除HTML标签),replace_with()方法可以替换标签元素的内容。
# 获取第一个p标签元素的文本内容 p_text = soup.find('p').get_text() # 获取第一个h1标签元素的文本内容 h1_text = soup.find('h1').string # 将第一个p标签元素替换成新的标签元素 new_p = soup.new_tag('p') new_p.string = '皮蛋编程欢迎你!' soup.find('p').replace_with(new_p)
- 修改元素的属性值
使用BeautifulSoup库也可以修改标签元素的属性值,常用的方法包括:replace_with()、set()。
其中,replace_with()方法可以替换标签元素,set()方法可以设置标签元素的属性值。
# 将第一个a标签元素的href属性值修改为pidancode.com soup.find('a')['href'] = 'http://www.pidancode.com' # 将第一个p标签元素替换成新的标签元素 new_p = soup.new_tag('p') new_p.string = '皮蛋编程欢迎你!' soup.find('p').replace_with(new_p)
- 新增元素
使用BeautifulSoup库可以新增标签元素,常用的方法包括:new_tag()、new_string()、insert()。
其中,new_tag()方法可以新建标签元素,new_string()方法可以新建文本节点,insert()方法可以插入标签元素和文本节点。
# 新建一个新的a标签元素 new_a = soup.new_tag('a') new_a['href'] = 'http://www.pidancode.com' new_a.string = '皮蛋编程' # 在body标签元素内,新增一个新的a标签元素 soup.body.insert(0, new_a) # 在第一个a标签元素前,新增一个新的span标签元素 new_span = soup.new_tag('span') new_span.string = ',编程从此不再孤单!' soup.find_all('a')[0].insert_before(new_span) # 新增一个新的文本节点 new_text = soup.new_string('last modified: 2021.10.10') soup.body.append(new_text)
- 删除元素
使用BeautifulSoup库也可以删除标签元素,常用的方法包括:decompose()、extract()。
其中,decompose()方法可以将标签元素从文档中删除,extract()方法可以将标签元素从文档中移除,但可以保存在内存中。
# 删除class为container的div标签元素 soup.find('div', {'class': 'container'}).decompose() # 移除第一个a标签元素 removed_a = soup.find('a').extract()
相关文章