2009-08-21 64 views
2

如果您现在访问this link,您可能会收到VBScript错误。我该如何刮这个框架?

另一方面,如果您访问this link first,然后上述链接(在同一会话中),页面会通过。

这个应用程序设置的方式,第一页是作为第二(主)页面中的框架。如果你点击一下,你会看到它是如何工作的。

我的问题:我如何用Python刮第一页?我试过了我能想到的所有东西 - urllib,urllib2,机械化 - 我得到的只有500个错误或超时。

我怀疑答案在于机械化,但是我的mechanize-fu不足以解决这个问题。谁能帮忙?

回答

8

它始终归结为请求/响应模型。您只需制作一系列http请求,以获得所需的响应。在这种情况下,您还需要服务器将每个请求视为同一会话的一部分。要做到这一点,您需要弄清楚服务器如何跟踪会话。这可能是许多事情,从cookie到隐藏输入以形成操作,发布数据或查询字符串。如果我不得不猜测在这种情况下我会把钱放在cookie上(我没有检查链接)。如果这是真的,你需要发送第一个请求,保存你找回的cookie,然后发送该cookie以及第二个请求。

也可能是,初始页面将有按钮和链接,让你到第二页。这些链接将有类似<A href="http://cad.chp.ca.gov/iiqr.asp?Center=RDCC&LogNumber=0197D0820&t=Traffic%20Hazard&l=3358%20MYRTLE&b=">的地方,其中很多gobbedlygook是由第一页生成的。

"Center=RDCC&LogNumber=0197D0820&t=Traffic%20Hazard&l=3358%20MYRTLE&b="部分对您必须从第一页获取的某些会话信息进行编码。

而且,当然,您甚至可能需要同时做这两件事。

+0

感觉需要编辑这个最优秀的答案,包括URL会话跟踪以及cookie会话跟踪。 – 2009-08-21 21:03:30

+0

谢谢你把我推向正确的方向。你用cookie处理概述的方法是完全正确的解决方案,对我来说,答案是手动处理机械化cookie [如此处所述] [1]。 [Et瞧!] [2] [1] http://wwwsearch.sourceforge.net/mechanize/doc.html [2] http://twitter.com/humboldtCHP – hanksims 2009-08-22 06:24:33

1

除机械化之外,您还可以尝试BeautifulSoup。我并不积极,但你应该能够将DOM解析到框架页面中。

我还发现Tamper Data是我写刮板时相当有用的插件。