目录
一、模块简介
Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.Beautiful Soup会帮你节省数小时甚至数天的工作时间.
二、方法利用
1、引入模块
# 引入 html_doc = \"\"\" <html><head><title>The Dormouse\'s story</title></head> <body> <p class=\"title\"><b>The Dormouse\'s story</b></p> <p class=\"story\">Once upon a time there were three little sisters; and their names were <a href=\"http://example.com/elsie\" rel=\"external nofollow\" class=\"sister\" id=\"link1\">Elsie</a>, <a href=\"http://example.com/lacie\" rel=\"external nofollow\" class=\"sister\" id=\"link2\">Lacie</a> and <a href=\"http://example.com/tillie\" rel=\"external nofollow\" class=\"sister\" id=\"link3\">Tillie</a>; and they lived at the bottom of a well.</p> <p class=\"story\">...</p> \"\"\" from bs4 import BeautifulSoup soup = BeautifulSoup(html_doc, \'html.parser\')
四种解析器
2、几个简单的浏览结构化数据的方法
#获取Tag,通俗点就是HTML中的一个个标签
#获取Tag,通俗点就是HTML中的一个个标签 soup.title # 获取整个title标签字段:<title>The Dormouse\'s story</title> soup.title.name # 获取title标签名称 :title soup.title.parent.name # 获取 title 的父级标签名称:head soup.p # 获取第一个p标签字段:<p class=\"title\"><b>The Dormouse\'s story</b></p> soup.p[\'class\'] # 获取第一个p中class属性值:title soup.p.get(\'class\') # 等价于上面 soup.a # 获取第一个a标签字段 soup.find_all(\'a\') # 获取所有a标签字段 soup.find(id=\"link3\") # 获取属性id值为link3的字段 soup.a[\'class\'] = \"newClass\" # 可以对这些属性和内容等等进行修改 del bs.a[\'class\'] # 还可以对这个属性进行删除 soup.find(\'a\').get(\'id\') # 获取class值为story的a标签中id属性的值 soup.title.string # 获取title标签的值 :The Dormouse\'s story
三、具体利用
1、获取拥有指定属性的标签
方法一:获取单个属性 soup.find_all(\'div\',id=\"even\") # 获取所有id=even属性的div标签 soup.find_all(\'div\',attrs={\'id\':\"even\"}) # 效果同上 方法二: soup.find_all(\'div\',id=\"even\",class_=\"square\") # 获取所有id=even并且class=square属性的div标签 soup.find_all(\'div\',attrs={\"id\":\"even\",\"class\":\"square\"}) # 效果同上
2、获取标签的属性值
方法一:通过下标方式提取 for link in soup.find_all(\'a\'): print(link[\'href\']) //等同于 print(link.get(\'href\')) 方法二:利用attrs参数提取 for link in soup.find_all(\'a\'): print(link.attrs[\'href\'])
3、获取标签中的内容
divs = soup.find_all(\'div\') # 获取所有的div标签 for div in divs: # 循环遍历div中的每一个div a = div.find_all(\'a\')[0] # 查找div标签中的第一个a标签 print(a.string) # 输出a标签中的内容 如果结果没有正确显示,可以转换为list列表
4、stripped_strings
去除\\n换行符等其他内容 stripped_strings
divs = soup.find_all(\'div\') for div in divs: infos = list(div.stripped_strings) # 去掉空格换行等 bring(infos)
四、输出
1、格式化输出prettify()
prettify() 方法将Beautiful Soup的文档树格式化后以Unicode编码输出,每个XML/HTML标签都独占一行
markup = \'<a href=\"http://example.com/\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" >I linked to <i>example.com</i></a>\' soup = BeautifulSoup(markup) soup.prettify() # \'<html>\\n <head>\\n </head>\\n <body>\\n <a href=\"http://example.com/\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" >\\n...\' print(soup.prettify()) # <html> # <head> # </head> # <body> # <a href=\"http://example.com/\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" > # I linked to # <i> # example.com # </i> # </a> # </body> # </html>
2、get_text()
如果只想得到tag中包含的文本内容,那么可以调用 get_text() 方法,这个方法获取到tag中包含的所有文版内容包括子孙tag中的内容,并将结果作为Unicode字符串返回:
markup = \'<a href=\"http://example.com/\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" rel=\"external nofollow\" >\\nI linked to <i>example.com</i>\\n</a>\' soup = BeautifulSoup(markup) soup.get_text() u\'\\nI linked to example.com\\n\' soup.i.get_text() u\'example.com\'
© 版权声明
THE END
暂无评论内容