需要从网站上提取数据...网页查询?宏?

时间:2013-03-08 03:56:22

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

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

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

在我的清单中的数以千计的DOT#中,并非所有人都会在本网站上提交文件,如果这有所不同。

可以使用宏或Excel Web查询完成吗?我知道我可能听起来像一个新手,但我很感激我能得到的任何帮助。

由于

2 个答案:

答案 0 :(得分:1)

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

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

你在写我正在描述的网络服务是什么?那取决于你的偏好。我,我在Ruby on Rails中编写它,因为它可以轻松处理任务的抓取方面,并且可以轻松地报告数据。但它真的可以追溯到你最熟悉的编码。

答案 1 :(得分:1)

你绝对可以做到这一点;但Excel并不是解析的最佳工具(虽然我已经完成了!人们说这是不可能的 - 可以使用异步Windows API调用完成;祝你好运......)

您要问的第一个问题是该网站是否是动态的。它是否在飞行中产生结果?另一个问题是:他们的URL约定是否一致? (换句话说:你可以将结果加入书签并在不同的会话中回复它们,而不必做任何事情,甚至可能登录到网站......)

如果网站是静态的或具有一致的URL查询机制(我们在HTML中说:Web查询是“GET”而不是表单“POST”...),您可以使用一个很好的解析器导向Python之类的语言,使用访问网页的库; Google的例子应该比比皆是。在你完成所有调试并且它可靠地运行之后(还测试它能够智能地报告当你无法访问网站的情况;暂时中断你的网络连接...),从Excel宏你可以shell到Python脚本。诀窍是Excel中的vanilla shelling不会阻止你的shelled命令,而是异步运行。因此,再次使用Google,您可以找到一个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之外,这些其他产品会对浏览器进行虚拟复制,但遗憾的是,这些产品通常无法实现。有些人甚至懒得复制可能在网页上的Javascripts(这通常是网站页面呈现方式的重点!)

玩得开心。这是游泳池的深层,但它会让你忙碌而且有收益。