网页抓取 加密html(1.爬虫用的吗,为什么要使用它来做测试?)
优采云 发布时间: 2022-02-11 01:06网页抓取 加密html(1.爬虫用的吗,为什么要使用它来做测试?)
本文首发于:Walker AI
Q:爬虫用的不是BeautifulSoup吗?为什么要用它来测试?
A:日常工作中有很多数据对比测试任务。当后端接口有数据加密,或者接口有鉴权等情况时,我们需要从后端获取参数,需要大量的时间和成本。.
于是我想……我可以去前端页面获取数据吗?我在网上查了一下,果然有一个从前端页面爬取数据的工具包。经过简单的学习,也算是给自己做个笔记吧。今天我们主要使用requests+BeautifulSoup等一些工具包来实现这个功能。
1. 什么是 BeautifulSoup?
首先介绍一下,BeautifulSoup是一个python库,主要功能是从网页中抓取数据。
其官方解释如下:
了解了工具包的作用之后,我们再写几行代码简单学习一下,就拿这个网站来练习吧。
/
2. 如何使用 BeautifulSoup?2.1 如果使用该工具,需要安装相应的环境依赖包。CMD 执行以下命令:
图1.BeautifulSoup环境安装2.2 环境安装完成后,我们来写一个小例子
用浏览器打开/
图 2. 待爬取页面信息展示
定位到我们要获取的数据信息,通过element找到元素。
复制元素的选择器后,编写以下代码:
from bs4 import BeautifulSoup
import requests
import re
url = 'http://www.cntour.cn/'
strhtml = requests.get(url)
soup = BeautifulSoup(strhtml.text, 'lxml')
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a')
print(data)
通过 BeautifulSoup,我们可以得到 html 对象。使用lxml解析器后,打印数据后可以看到如下信息:
图3.获取标签信息2.3 获取到html对象后,接下来获取整组数据,用于遍历获取页面上的标题、连接和ID
再次获取html对象,删除标签后的nth-child(1),再次执行代码。
from bs4 import BeautifulSoup
import requests
import re
url = 'http://www.cntour.cn/'
strhtml = requests.get(url)
soup = BeautifulSoup(strhtml.text, 'lxml')
# data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a')
# print(data)
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a')
print(data)
这样,我们就得到了html页面和列表中的所有数据对象。
打印后可以看到如下信息。
图 4. 获取批次标签信息
2.4 从 html 对象中提取数据
从浏览器控制台可以看到,我们要获取的参数都在标签中。
图 5. 获取标签内容
然后通过遍历html对象获取标签中的数据。
编写以下代码:
from bs4 import BeautifulSoup
import requests
import re
url = 'http://www.cntour.cn/'
strhtml = requests.get(url)
soup = BeautifulSoup(strhtml.text, 'lxml')
# data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li:nth-child(1) > a')
# print(data)
data = soup.select('#main > div > div.mtop.firstMod.clearfix > div.centerBox > ul.newsList > li > a')
print(data)
title = []
link = []
ID = []
for item in data:
result = {
'title': item.get_text(),
'link': item.get('href'),
'ID': re.findall('\d+', item.get('href'))
}
# print(result)
title.append(result['title'])
link.append(result['link'])
ID.append(result['ID'][0])
print(title)
print(link)
print(ID)
这样我们就可以在页面上获取我们想要的数据信息,使用工具包pandas或者xlrd在Excel中读取预期结果数据,对比页面上的数据。如果结果相同,则通过,如果不同,则抛出异常。这里主要介绍BeautifulSoup,数据读取的方法就不过多介绍了。
3. 总结
BeautifulSoup虽然是爬虫工具,但也可以起到辅助测试的作用。我只是简单的写了一个例子,只是为了对工具做个简单的介绍和理解,希望可以对大家有所帮助,并且有更好的实现方式。添加代码来实现。当然,如果你在做数据对比,最好的方式是通过后端获取数据。这种方法只有在不方便通过接口获取数据时(比如后端加密,网站有防扒措施等)使用。另外BeautifulSoup还有很*敏*感*词*,比如修改和删除功能,可以在以后的学习中逐步学习。
我们是步行者AI,我们在“AI+游戏”中不断前行。
来【公众号| xingzhe_ai] 与我们讨论更多技术问题!