网页抓取 加密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] 与我们讨论更多技术问题!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线