【问题标题】:Webscraping a tricky asp.net page网页抓取一个棘手的 asp.net 页面
【发布时间】:2012-09-26 05:56:24
【问题描述】:

总体目标是在以下网页上执行搜索http://www.cma-cgm.com/eBusiness/Tracking/Default.aspx,其容器值为 CMAU1173561。我尝试了两种方法,php 扩展 cURL 和 python 的机械化。接近的 php 涉及使用页面上的输入字段执行 POST 提交(注意:这些在 asp.net 页面上真的很难看)。返回的页面不包含任何搜索结果。第二种方法涉及使用 python 的 mechanize 模块。在这种方法中,我加载页面,选择表单,然后将文本字段 ctl00$ContentPlaceBody$TextSearch 更改为容器值。当我再次加载响应时,没有搜索结果。

我真的走到了尽头。任何帮助将不胜感激,因为就目前而言,我的下一步是成为我不喜欢的 asp.net 专家。

【问题讨论】:

  • 当您发出 PHP cURL 请求时,您是否发送了隐藏的 __VSTATE 参数? Web 服务器需要它来验证其他表单数据。

标签: asp.net curl web-scraping mechanize


【解决方案1】:

该页面的来源非常可怕(巨大的视图状态、到处都是表格、内联 CSS、看起来像是从 Word 中复制的样式)。

无论如何...一个 ASP.Net 表单仍然像任何其他表单一样将相同的原始数据传递给服务器(尽管它是抽象给开发人员的)。

您很可能缺少与请求一起使用的 cookie。如果搜索页面(或站点的​​任何部分)使用会话状态,则 ASP.Net 会话 cookie 必须包含在请求中。您将能够从它的名称(包含“asp.net”和“session”)中分辨出来。

我假设您在提交页面时使用了 Firebug 或 Chrome 之类的工具来查看完整的传出请求。从我的快速测试来看,该请求似乎可以使用 GET 而不是 POST 来执行。我提交了一个表单,查看了请求,然后将 URL 粘贴到了新的浏览器窗口中。

示例:http://www.cma-cgm.com/eBusiness/Tracking/Default.aspx?ContNum=CMAU1173561&T=57201202648

这可能就是您需要做的所有事情。

【讨论】:

  • GET 响应不返回任何运输信息。至于 cookie,我尝试在 python 中同时使用斜纹和机械化。两者都会自动处理 cookie,所以我不认为这是问题所在。工作代码真的会受到赞赏,因为在理论和实际使应用程序工作之间似乎存在很大差距。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2021-03-10
  • 1970-01-01
  • 2020-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多