爬虫之Beautiful Soup4(bs4)的基本使用


 

Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库。 
它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式。 
在爬虫开发中主要用的是Beautiful Soup的查找提取功能。 
Beautiful Soup是第三方模块,需要额外下载 
下载命令:pip install bs4 
安装解析器:pip install lxml 
这里写图片描述 
这里写图片描述 
这里写图片描述

from bs4 import BeautifulSoup

# 创建BeautifulSoup对象
# 当数据来源为本地文件时
file = open("xxx.html")
soup = BeautifulSoup(file, "lxml")

# 当数据来源为网络时
content = requests.get("url请求").text
soup = BeautifulSoup(content, "lxml")

#1 按标签名查找标签
soup.a # 获取第一个匹配到的标签

#2 tag属性,a为例
soup.a.attrs # 获取标签中所有属性名与对应属性值的字典
soup.a.attrs["属性名"] # 获取属性名对应的属性值
soup.a.["属性名"] # 获取属性名对应的属性值的简写
soup.a.string # 获取第一个匹配到的标签的文字内容
soup.a.text # 获取第一个匹配到的标签以及其所包含的子标签的所有内容
soup.a.contents[0] # tag的.content 属性可以将tag的子节点以列表的方式输出
.children:获取Tag的所有子节点,返回一个生成器

for child in bs.body.children:
print(child)
.descendants:获取Tag的所有子孙节点

.strings:如果Tag包含多个字符串,即在子孙节点中有内容,可以用此获取,而后进行遍历

.stripped_strings:与strings用法一致,只不过可以去除掉那些多余的空白内容

.parent:获取Tag的父节点

.parents:递归得到父辈元素的所有节点,返回一个生成器

.previous_sibling:获取当前Tag的上一个节点,属性通常是字符串或空白,真实结果是当前标签与上一个标签之间的顿号和换行符

.next_sibling:获取当前Tag的下一个节点,属性通常是字符串或空白,真是结果是当前标签与下一个标签之间的顿号与换行符

.previous_siblings:获取当前Tag的上面所有的兄弟节点,返回一个生成器

.next_siblings:获取当前Tag的下面所有的兄弟节点,返回一个生成器

.previous_element:获取解析过程中上一个被解析的对象(字符串或tag),可能与previous_sibling相同,但通常是不一样的

.next_element:获取解析过程中下一个被解析的对象(字符串或tag),可能与next_sibling相同,但通常是不一样的

.previous_elements:返回一个生成器,可以向前访问文档的解析内容

.next_elements:返回一个生成器,可以向后访问文档的解析内容

.has_attr:判断Tag是否包含属性



#3 函数
soup.a.get_text() # 同soup.a.text 
soup.find("a") # 同soup.a 
soup.find("a",属性名="属性值") # 根据属性值定位到第一个匹配到的标签 注意: 若属性名是 class 则需要在后面加个下划线,写成 class_ 

原型: find_all(name, attrs, recursive, text, **kwargs)
       参数可以是方法、属性、正则匹配式
soup.findall("a") # 获取匹配到的所有标签, 返回一个列表 
soup.findall(["a", "b"]) # 可以获取多种类的标签 
soup.findall("a", limit=2) # 获取前2个匹配到的标签
soup.select("选择器") 选择器包括: 
标签选择器:soup.select("a") ID选择器:soup.select("#xxx") 
类选择器:soup.select(".xxx") 层级选择器:soup.select("div a") # 任意多级 
soup.select("div > a") # 直系的一级 注意:select函数返回的永远是一个列表
兄弟节点标签查找 soup.select(".mnav ~ .bri")  #

  

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM