用Excel / VBA刮ASP页面
我想用Excel来刮取ASP.NET页面。 不幸的是,页面一次只能返回50个logging,有几页。 Excel的本地Web查询模块只会提取第一页。 我想要所有的页面。
像大多数(所有)ASP页面一样,当请求一个新页面时,有一些隐藏的variables被发送回服务器。 重要的是_VIEWSTATE和_EVENT_VALIDATION。
我已经写了一个VBA函数来获取页面的HTML源代码,并从这个函数中获取这些variables。
我也写了一个.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
如果post查询被放置在文件中,则这个iqy页面成功地回退期望的结果。 我也可以在VBA中以编程方式使用这个.iqy页面,并使用QueryTablesdynamic地分配POST查询。 但是,我被告知我的查询没有返回任何东西。 我怀疑这是因为我的论点的长度。 仅VIEWSTATE是大约5万字。 我已经尝试将参数string打印到文件,并截断它。 不过,我可以从文件中读取相同的string并成功地dynamic使用它。
我的问题是:我是以这种最好的方式去做的? 在做这件事时我应该注意什么限制? 另外,Excel中的string大小是否有限制?
- 在Excel中只格式化1列以强制文本,并将所有其他文件保存为数字,同时从asp.net导出到Excel
- ASP.NET MVC – 从MemoryStream下载Excel文件(损坏的文件)
- C#通用OleDb连接到Excel
- 为什么我得到一个内存不足错误做ASP .NET Excel互操作?
- 限制由多个GridViews由asp.net创build的excel文件中的宽度
- 阅读中文输出为Excel时
- 将excel工作簿转换为字节
- 如何使用C#将Excel csv或xls文件的行从远程位置读取到ASP.NET应用程序中?
- 读取Excel或OpenOffice(.ods)文件使用ActiveXObject(JavaScript)