【问题标题】:How can I scrape this frame?我怎样才能刮掉这个框架?
【发布时间】:2025-12-20 09:50:10
【问题描述】:

如果您现在访问this link,您可能会收到 VBScript 错误。

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

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

我的问题:如何用 Python 抓取第一页?我已经尝试了所有我能想到的东西——urllib、urllib2、mechanize——我得到的只是 500 个错误或超时。

我怀疑答案在于机械化,但我的机械化功能不足以破解这个问题。有人可以帮忙吗?

【问题讨论】:

    标签: python vbscript screen-scraping mechanize


    【解决方案1】:

    它总是归结为请求/响应模型。您只需制作一系列 http 请求,以便获得所需的响应。在这种情况下,您还需要服务器将每个请求视为同一会话的一部分。为此,您需要弄清楚服务器如何跟踪会话。它可能是很多东西,从 cookie 到隐藏输入,再到表单操作、发布数据或查询字符串。如果我不得不猜测,在这种情况下我会把钱放在饼干上(我没有检查链接)。如果这成立,您需要发送第一个请求,保存您返回的 cookie,然后将该 cookie 与第二个请求一起发送。

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

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

    当然,您甚至可能需要两者都做。

    【讨论】:

    • 觉得有必要编辑这个最出色的答案,以包括 URL 会话跟踪以及 cookie 会话跟踪。
    • 感谢您将我推向正确的方向。您概述的 cookie 处理方法正是正确的解决方案,对我来说,答案是使用 mechanize [如这里所述][1] 手动处理 cookie。 [瞧!][2] [1] wwwsearch.sourceforge.net/mechanize/doc.html [2] twitter.com/humboldtCHP
    【解决方案2】:

    除了 Mechanize 之外,您还可以尝试 BeautifulSoup。我不肯定,但你应该能够将 DOM 解析到框架页面中。

    我还发现Tamper Data 在我写爬虫时是一个相当有用的插件。

    【讨论】: