抓取页面元素--python篇
2018-06-12 本文已影响0人
sandy测试路
目标:抓取该页面的Followers数量
- 因为做自动化测试时经常需要抓取页面元素用作判断,所以这里作下简单的说明
所需包:
- requests,bs4
BeautifulSoup介绍
- 官方文档: beautifulsoup解析html/xml
- 安装: pip install beautifulsoup4
1. 获取操作tag
- 获取操作tag的接种方式:
-
soup.find_all(name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)
,返回符合条件的所有标签,查找不到则返回[],可以传递标签名,标签属性,关键字参数,函数,True等 -
soup.find(name=None, attrs={}, recursive=True, text=None, **kwargs)
,返回第一个符合条件的标签,查找不到则返回None -
soup.select(selector, _candidate_generator=None, limit=None)
,根据css选择器返回所有符合条件的标签 -
soup.select_one(selector)
,返回符合css选择器的第一个标签
2. 操作tag
- tag.name ,获取标签名,例如:'div'
- tag['attr_name'] , 获取标签的某个属性的值,string类型
- tag['class'] ,获取标签的class属性值,list类型,例如:['orange', 'login']
- tag.attrs ,获取标签的所有属性,dict类型
- tag.get_text() ,返回标签的内容,或者 tag.text
3. 实践
from bs4 import BeautifulSoup
import requests
res = requests.get('https://gitee.com/maxiaoqian')
# 如果不指定parser,会有警告,使用默认的html.parser,不同的系统解析可能会有差异
soup = BeautifulSoup(res.text, 'html.parser')
# 获取操作tag, <class 'bs4.element.Tag'>
# 返回:
'''
<div class="follow-num" id="followers-number">
42
</div>
'''
tag = soup.find('div', attrs={'id': 'followers-number'}) # 查找树
# tag = soup.find_all('div', attrs={'id': 'followers-number'})[0]
# tag = soup.select_one('div#followers-number') # css selector方式
# tag = soup.select('div#followers-number')[0]
# 返回tag的内容: tag.text 或者 tag.get_text()
print(tag.get_text().strip()) # 移除内容字符串中前后的空格,返回: '42'