delphi 用idhttp做web页面数据抓取 注意事项

这里不讨论webbrowse方式了 。直接采用indy的 idhttp Get post 可以很方便的获取网页数据。

但如果要抓取大量数据 程序稳定运行不崩溃就不那么容易了。这几年也做了不少类似工具 总结了几点 好记性不如烂笔头。

  1. 内存泄露 获取页面文本 少不了用到html解析 具体到delphi 估计采用mshtml htmltotext 方法的不少,这个方案再大数据量时就会内存溢出 导致程序崩溃,而这并不是每个程序员都知道。解决的方案:采用自己的html解析类 这里我要感谢 武稀松(csdn称呼) 该类已非常完善 不存在内存泄露 而且目前还没遇到解析不了的网页。
  2. out of memory 。获取下来的数据我们一般采取tstrings来内存暂存 殊不知 当数据量达到百万 程序就会吃掉所有内存而报out of memory 解决方案很简单 定时定量存为文件。
  3. 线程池。下载我们都希望是越快越好 那么很容易就采用多线程方案。再这里我建议采用线程池 而不是频繁的创建销毁线程。
  4. 异常处理。刷网页数据会越到各种奇葩异常数据 这时需要我们过滤 编写健壮代码 已保证程序不over。