爬虫的基本步骤一般是:审查网页元素,找到对应标签,获取对应值。这篇文章讲的就是“获取对应值”内容,利用Python 的BeautifulSoup4库获取标签的标签名、标签的属性名以及标签的值。
BS4的取值主要通过以下方法。
标签名
# 获取标签名
tag.name
# 对应的改变标签名为
tag.name = "你想要的标签"
属性
#获取属性
#获取属性列表
tag.attrs
#输出为一个dict键为属性,值为属性值
#例如{"class":"abc", "id":"link1"}
#获取指定属性
tag['class']
#或
tag.get('class')
#多值属性
#对于HTML中定义的一些可以包含多个值的属性(class,rev等等)
#返回值为list类型
tag['class']
#例如['top', 'box']
#为属性赋值
tag['class'] = "class1"
内容
这里用两种获取方式 .string 和 get_text():
.string 用来获取标签的内容;
get_text() 用来获取标签中所有字符串包括子标签的内容。
#获取当前标签内容
tag.string
#返回结果的type为 <class 'bs4.element.NavigableString'>
#获取标签内所有的字符串
tag.get_text()
#返回结果的type为 <class 'str'>
#为标签内容赋值
tag.string = "str"
注意!!
在取值时我们要注意一点就是在获取标签的时候获取的是单个标签还是标签列表。
也就是find()和find_all(),select()和select_one()的区别。
当使用
find()
select_one()
时,获得的是一个标签
类型为
<class 'bs4.element.Tag'>
所以可以使用tag['class']
取值。
当使用
find_all()
select()
时,获得的是组标签(就算只有一个标签也是一组)
类型为
#find_all()的返回值类型
<class 'bs4.element.ResultSet'>
#select()的返回值类型
<class 'list'>
这时,我们要取值就需要先定位是list(ResultSet)中的那个标签在取值,例如tag[0]['class']。
排版及内容略有修改。