【问题标题】:Need to pull data from a website...web query? macro?需要从网站中提取数据...网络查询?宏?
【发布时间】:2013-03-08 03:56:22
【问题描述】:

我有一个该国每个 DOT #(Dept. of Trans.)的列表。我想找出这些公司中每一个的保险生效日期。如果你去http://li-public.fmcsa.dot.gov-->“继续”-->然后从下拉列表中选择“运营商搜索”并点击“去”它会带你到一个搜索表单(这是进入这个屏幕的唯一方法)。

从那里,您可以输入一个 DOT # X(以 61222 为例),它会将您带到另一个屏幕。单击“以 HTML 格式查看报告”,然后在底部您会看到“有效/未决保险”。我想从该页面中提取“生效日期”并将其粘贴在我已经知道的 DOT # X 旁边的电子表格中。

在我列表中的数千个 DOT # 中,并非所有人都会在此网站上提交文件,如果这有影响的话。

这可以通过宏或 Excel Web 查询来完成吗?我知道我可能听起来像个新手,但如果我能得到任何帮助,我将不胜感激。

谢谢

【问题讨论】:

  • 我真的很感谢您的两位 cmets。不幸的是,我对这些东西很感兴趣。我想我需要考虑学习这种付钱给别人做的东西。如果我雇了一个程序员,知道这会发生什么吗?
  • 我曾经写过 vba 宏,它在您描述的情况下从网站中提取数据。准备起来并不复杂,但有点费时。然而,我的解决方案最大的缺点是:到达最终站点所需的时间——出于安全原因,大约需要 10 分钟。每次点击 10 秒,这意味着大约 10 秒。在你的情况下 60 秒;页面代码必须是稳定的,因为宏读取 HTML 代码并且操作是指代码的某个部分。如果网络管理员更改任何内容,您可能会在更改宏之前无法检索数据。

标签: macros web-scraping screen-scraping imacros excel-web-query


【解决方案1】:

你能做到吗?坦率地说,即使您可以在电子表格进行处理时锁定它。最后,您将如何处理中途的错误?

我不会在面向客户端的应用程序中这样做。这听起来更像是在服务器端应用程序中做的事情,它可以在更受控的环境中进行处理和收集信息。然后,您的 Excel 电子表格可以查询该应用程序并一举获取信息。错误处理要简单得多,而且您最终不会坐在那里盯着 Excel,为什么它可以在数千个网站中运行。它不是为了优雅地做到这一点而设计的。

你用什么来写我描述的网络服务?好吧,这取决于您的喜好。我,我会用 Ruby on Rails 编写它,因为它可以轻松处理任务的抓取方面,也可以轻松报告数据。但它确实可以回归到你最擅长的编码。

【讨论】:

    【解决方案2】:

    你绝对可以做到;但 Excel 并不是进行解析的最佳工具(尽管我已经做到了!人们说这是不可能的 - 可以使用异步 Windows API 调用来完成;祝一切顺利......)

    您要问的第一个问题是该网站是否是动态的。它是否即时产生结果?另一个问题是:它们的 URL 约定是否一致? (换句话说:您可以为结果添加书签并在不同的会话中返回它们,而无需做任何事情,只需登录该站点...)

    如果站点是静态的或具有一致的 URL 查询机制(我们在 HTML 中说:Web 查询是“GET”而不是“POST”表单...),您可以使用一个不错的面向解析器使用访问网页的库的 Python 等语言;谷歌中应该有很多例子。在您完成所有调试并且它可靠地工作之后(还测试它是否智能地报告您无法访问该站点的情况;为此暂时中断您的网络连接......),您可以从 Excel 宏中外壳到Python 脚本。诀窍是 Excel 中的普通脱壳不会阻塞您的脱壳命令,而是异步运行。所以再次使用谷歌,你可以找到一个 Windows API 调用,你可以从 Excel 到 shell 同步到你的检索任务(如果你在它完成之前没有阻止它,你后续的宏代码期望解析结果将在那里找不到! ) 您的 Python 解析代码可以生成一个制表符分隔的文本文件,您的宏可以轻松加载该文件。

    看到这个设计的意义了吗?模块化的。如果您的解析中存在错误,只需查看 CSV 就更容易确定。而且您正在利用专业化:您正在使用一种专为解析而设计的编程语言(Python,无论如何......); VBA 并不是真正的解析语言。

    如果不是静态网页,而是需要创建唯一条目的动态网页,该怎么办?然后,除了使用来自 Excel 宏的 bizarro Windows API 调用之外,您还可以使用 Greasemonkey 或 C# 制作动态解析脚本。 Greasemonkey 是 Firefox 的一个插件,可让您使用 Javascript 编写网站交互脚本。这是相当直观的。如果您采用这种方法,您可以在 Firefox 浏览器中为您配置了预定义的 Greasemonkey 脚本的页面提供外壳。同样,Greasemonkey 可以生成数据的文本文件,并且以后可以很容易地对其进行调试。我听到的另一个选择是 C#;我从来没有尝试过,因为它是微软特有的,但我看到很多商店都是这样做的。还有一个名为 HTMLunit 的 Java 解析包,但我在尝试在网页上模拟 Javascript 事件时发现它坏了。您可以查看的其他 HTML 解析器是 Jerry 和 Cobra;还有一种叫做 Selenium 的新产品。我发现 Greasemonkey 是最可靠的,因为它使用实际的浏览器进行操作;然而,除了 Selenium 之外,这些其他产品都会对浏览器进行虚拟复制,但不幸的是,它们经常无法做到这一点。有些人甚至懒得复制网页上可能存在的 Javascript(这通常是网站页面呈现方式的主要内容!)

    玩得开心。这是池子的最深处,但它会让您忙碌并获得丰厚的就业机会。

    【讨论】:

    • 回答上面的@user2146958:有人可以向您展示如何做到这一点:http://www.wyzant.com/Tutors/immersive.excel。我宁愿私下给你发消息,但我认为这个板上没有办法做到这一点,而且听起来你陷入了困境。
    猜你喜欢
    • 2017-10-16
    • 1970-01-01
    • 2018-04-03
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 2015-03-21
    相关资源
    最近更新 更多