【问题标题】:Please help: How can I scrape this web page?请帮助:我怎样才能抓取这个网页?
【发布时间】:2010-11-29 09:24:35
【问题描述】:

有一个提供搜索服务的网站。你输入一个数字,搜索,它会返回结果。我想做的是通过coldfusion以编程方式运行该搜索,而不必去网站手动搜索。

这是我想阅读/抓取的网页中的表单的样子(查看页面源时看到的):

<form id="frmNumID" name="frmNum" action="" method="post">

    <TABLE border=0 cellPadding=0 cellSpacing=0>
     <TR>
      <TD align="center">
         <label class="NumLabel" for="Num" ACCESSKEY="1">ENTER NUM:</label>
        <input class="NumInput" id="Num" name="inputNum"  onfocusin="select()"  title="Num Input" tabindex="1" type="text" value=""  size ="29" maxlength="17" >&nbsp;&nbsp;

      </TD>

      <TD align="center">
         <input class="NumInput" title="Submit Num" tabindex="2" type="image" src="/include/pics/SubmitBtn.jpg" value="submit" ACCESSKEY="2">
      </TD>
     </TR>
     </TABLE>

     <TABLE border=0 cellPadding=0 cellSpacing=0>
     <TR>    
      <TD colspan="2" align="center">

        <input type="radio" name="displayType" value="NONE"   Checked  />No Pictures&nbsp;&nbsp;                          
        <input type="radio" name="displayType" value="STUFF"    /> Other Stuff&nbsp;&nbsp;                
        <input type="radio" name="displayType" value="MORESTUFF"    /> More Other Stuff  
      </TD>
     </TR>

    </TABLE>
    <div id="NUMMsg"></div>

  </form>

我真正关心的唯一字段是 Num 输入字段。我想向该字段发布一个值,运行搜索,并在我的冷融合代码中获取结果。这是我目前所拥有的:

<cfhttp url="http://www.someurl.com/"
        method="POST">
    <cfhttpparam name="Num" type="FormField" value="123456789123456" />
</cfhttp>
<cfdump var="#cfhttp.filecontent#" />

但是当我转到页面时,转储只会显示“Connection Failure”。我做错了什么?

【问题讨论】:

  • 抛开技术问题不谈,我会警惕抓取网站。结构的变化可能会破坏你的刮刀。该网站的使用条款可能会禁止这样做,特别是如果您这样做的目的不仅仅是个人使用。最后,如果你在没有节流的情况下敲击站点,可能会导致意外的高负载。

标签: post coldfusion scrape cfhttp


【解决方案1】:

从您的示例代码中不清楚提交操作 URL 是什么?它是空白的。也许该网站使用 JavaScript 等设置它?

您可能还需要发布displayType 表单变量,因为这是一个复选框,可能需要提供一些值。

小心屏幕刮擦 - 这可能是维护的噩梦。如果无论如何要使用他们提供的官方 API,您应该这样做,因为一旦他们更改代码(发布 URL/标记等),您的代码很可能会中断。

【讨论】:

    【解决方案2】:

    好的,这个网站提出了一个解决方案:http://australiansearchengine.wordpress.com/2009/09/28/cfhttp-connection-failure/

    他们建议添加以下 cfhttpparam 标签:

    <cfhttpparam type="header" name="accept-encoding" value="deflate;q=0">
    <cfhttpparam type="header" name="te" value="deflate;q=0"> 
    

    现在我不再遇到连接失败 :)

    【讨论】:

    • 我经常遇到这种情况。这是一个 IIS 问题,而我们工作中的 ColdFusion 服务器是 IIS,所以当我们第一次遇到这个问题时,这让我们很头疼。
    猜你喜欢
    • 2015-06-13
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多