使用Excel / VBA刮擦ASP页面

时间:2011-07-15 00:08:22

标签: asp.net excel vba query-string web-scraping

我正在尝试使用Excel抓取ASP.NET页面。不幸的是,该页面一次只返回50个记录,几页。 Excel的本机Web查询模块仅选取第一页。我想要所有页面。

与大多数(所有?)ASP页面一样,在请求新页面时会有一些隐藏变量发送回服务器。重要的是_VIEWSTATE和_EVENT_VALIDATION。

我编写了一个VBA函数,它获取页面的HTML源代码并从中抓取这些变量。

我还写了一个.iqy页面,它允许在其中发出POST请求。它看起来像这样:

WEB
1
http://www.myaspwebsite/search/search_List.aspx
__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwULLTEy[....truncated ..50k characters..]Mhudyk5U6u8%2BBpvxDPN8R4%3D&__EVENTVALIDATION=%2FwEWFQL%2FkN%2FBCgL6g%2B5vAvfY06EOAoic4qIIAome%2Bf4PAuOrjYgIAuKrjYgIAuGrjYgIAuCrjYgIAuerjYgIAt7e34UPAvuL7m8CtuLToQ4CiaTioggCyKX5%2Fg8C4tv1sAgC49v1sAgC4Nv1sAgC4dv1sAgC5tv1sAgC%2Fd7fhQ%2BU8QRtxd7MM4Bpa%2F%2FZC7I64eUh3Q%3D%3D&ctl00_RadMenu1_ClientState=&ctl00%24ContentPlaceHolder1%24NavBar1%24PageNoDropDownList=2&ctl00%24ContentPlaceHolder1%24NavBar1%24btnGo=Go&ctl00%24ContentPlaceHolder1%24NavBar2%24PageNoDropDownList=1

Selection=AllTables
Formatting=None
PreFormattedTextToColumns=True
ConsecutiveDelimitersAsOne=True
SingleBlockTextImport=False
DisableDateRecognition=False
DisableRedirections=False

如果将帖子查询放在文件中,则此iqy页面会成功返回所需的结果。 我也可以在VBA中以编程方式使用这个.iqy页面,并使用QueryTables动态分配POST查询。但是,我被告知我的查询没有返回任何内容。 我怀疑这是因为我的论点很长。仅VIEWSTATE大约有5万个字符。我已经尝试将参数字符串打印到文件中并将其截断。但是,我可以从文件中读取相同的字符串并成功动态使用它。

我的问题是:我这是最好的方式吗?这样做时我应该注意哪些限制?此外,Excel中的字符串大小是否有限制?

1 个答案:

答案 0 :(得分:0)

根据Microsoft关于Visual Basic strings的文档(相同的值适用于VBA字符串):

  

字符串可以包含0到大约二十亿(2 ^ 31)个Unicode字符。

这足以处理50k字符串。绕过IDE行限制和即时窗口打印限制的一种简单方法是将字符串打印到Excel单元格中,然后在需要使用该数据时将其读回到变量中。

相关问题