网页数据抓取怎么写(基于HTML标签来匹配肯定不合适的数据匹配方法来实现)
优采云 发布时间: 2021-10-01 12:30网页数据抓取怎么写(基于HTML标签来匹配肯定不合适的数据匹配方法来实现)
数据匹配
首先研究最关键的数据捕获。从各种形式的数据中“提取”内容。
当然还要依靠我们强大的正则表达式工具(个人觉得基于DOM树的分析很麻烦,很不灵活)
分析了几个BOKECC页面,总结如下:
1. 每个页面都有一定的差异,可能是基于不同的版本。HTML 写的很随意,基于 HTML 标签的匹配肯定是不合适的。
2. 页面有动态内容,需要分析模拟AJAX来请求。
在基于HTML源代码的数据爬取中,如果单纯想基于HTML标签进行挖掘,正确率肯定是很低的。仍然需要回归基础,挖掘人们的想法。
所以我大多使用基于页面视觉(如文本,或区域)的匹配方法。过滤掉一些不太重要的 HTML 标签。然后进行数据匹配。
这里用到了python的re模块。
首先,我写了几个程序进行测试。我测试了 网站 的 20 个不同的页面,它们基本上都能正确捕获。
接下来说说AJAX的内容。
为什么动态内容需要模拟 AJAX 请求?
因为您使用 HTTP 流来获取网页的内容,所以没有动态类型的内容。(比如div标签为空),但是当你以浏览器的形式访问时,可以看到数据。这是因为浏览器的javascript引擎执行其中的JS代码异步请求数据并动态打印在上级页面上。
网页界面
每个节点都需要暴露WEB界面。在上一篇文章的设计中,我提到了SOAP协议。在实际实现中,我们在本系统中仍然使用基于HTTP GET的接口。(编码相对简单,:D)。为了方便部署,体现python中一切都那么简单的原则,我没有使用apache等知名的web服务器,而是python的BaseHTTPServer模块。重载do_GET方法来实现我们WEB界面的暴露。
为什么WEB界面需要同时设计同步和异步返回?由于我们的分布式节点是基于任务形式的,我们的节点任务逻辑反馈包括2个步骤:
1. 确认任务接收
2. 任务完成回调
这样,控制器的程序就很容易写了:给所有节点发送任务,同时加上任务号,节点同步后反馈接收任务,等待,如果有节点任务回调,节点认为空闲,然后分配任务。. . (当然,实际情况可能是每个节点运行在多个线程中,节点或者控制器也可以维护一个任务队列和线程池)
如何实现异步?
起线程。(当然你也可以管理线程池,这里我不太在意)
数据库操作
没什么好说的,我这里用的MYSQL就是直接SQL语句。简单明了。
如何部署?
由于我只需要在WINDOWS平台上部署,所以我使用py2exe作为EXE包发布。
如果要实现自动化部署,也很简单。自己在每个节点上写一个“后门”,就可以统一调度所有机器的后门。(控制它的下载和重启)