网页数据抓取怎么写(基于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包发布。

  如果要实现自动化部署,也很简单。自己在每个节点上写一个“后门”,就可以统一调度所有机器的后门。(控制它的下载和重启)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线