本文共 1280 字,大约阅读时间需要 4 分钟。
互联网上存在海量的数据,各式各样的数据每天展现在我们面前,同时众多的金融、医学和计算机等学科的研究课题,都需要获取众多的数据作为样本进行科学分析,传统的人工采集操作根本上很难胜任数据采集,即便是能够收集也需要耗费众多的时间成本,自动化网站采集应用而生。一般采集数据是各种客户端所呈现的结构化数据,例如浏览器,APP等。数据存储在客户端。采集数据不会在服务器端采集,一方面比较困难,另外这也是一种违法行为。很多客户端也要求提供验证,如用户名密码等。
网站采集的原理基本一致,例如国内用的比较多的采集器某头、某鱼等,首先由客户端发出请求,服务器接受请求后再返回相应的数据,而采集器就从返回的数据中找到对应的数据。采集器根据采集要求自动发出不同的请求,例如模拟人的点击过程或者自定规则。网站的数据获取非常依赖数据的结构,必须根据不同的数据结构制定不同的采集规则。基本上每个网页的数据结构都不同,因此必须根据具体的网页来制定规则。
下面以某网站的一个页面为例,说明下网站数据采集的过程。
- 确定需要获取数据的网页
网页的结构如下图所示,这是个微信小程序源码的下载页面,需要获取如下内容:1 源码名称(仿天猫首页);2 获取模板截图的地址
2.获取相应的元素信息
这个比较简单,在浏览器中按F12就可以查找到相应的元素。本页面的元素信息如下:
源码名称:
元素的类名pins-title在本页是唯一的;
模板截图:
元素的类名pins-info在本页是唯一的;
(三)在程序中实现内容的获取
使用QWebEngine实现对网页的操作。
第一,为QWebEngineView设置网页的地址,并登录网站,具体实现可自行搜索下,网上很多;
第二,书写javascript代码,从而能获取指定元素的内容,代码如下,后面的ret是为了方便输出的参数:
QString jscode = "var i,title,elements,imgs='',ret='';"
"elements = document.querySelectorAll('.pins-title strong');"
"title = elements[0].innerText;"
"elements = document.querySelectorAll('.pins-info .text img');"
"for(i=0;i<elements.length;i++){imgs += elements[i].getAttribute('src');imgs+=',';};"
"ret = 'title=';"
"ret += title;"
"ret += '&';"
"ret += imgs;"
"ret;";
运行javascript代码:
web_view->page()->runJavaScript(jscode,[this](const QVariant& v){qDebug()<<v.toString();});
运行结果如下:
结果可交由主程序处理,例如存入excel表、数据库等。
转载地址:https://blog.csdn.net/hulinhulin/article/details/121139528 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!