请帮忙:我该如何抓取这个网页?

时间:2010-11-29 09:24:35

标签: post coldfusion scrape cfhttp

有一个提供搜索服务的网站。输入数字,搜索,然后返回结果。我想要做的是通过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输入字段。我想在该字段中发布一个值,运行搜索,并在我的coldfusion代码中获取结果。这就是我到目前为止所做的:

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

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

2 个答案:

答案 0 :(得分:1)

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

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

当心屏幕抓取 - 这可能是一场维护噩梦。如果无论如何使用他们提供的官方API,你应该这样做,因为一旦他们更改了他们的代码(发布URL /标记等),你的代码就可以很好地破解。

答案 1 :(得分:0)

好的,这个网站提出了一个解决方案: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"> 

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