网站抓取器更上一层楼
本文关键字:更上一层楼 抓取 网站 | 更新日期: 2023-09-27 17:55:42
所以!
对于我运行的粉丝网站,我还运行一个网站抓取器(/xmleader),它从游戏的安全网络位置读取信息。它像现在一样完美地工作,但我想让它变得更好,主要是更快。
我面临的第一个问题是如何维护一个会话,您可以在保持登录状态的同时执行大量请求(例如每 1 到 10 秒 30 个)。正常的 httprequest 并没有真正起作用,因为登录是用令牌保护的,该令牌必须与我的登录信息一起提交。现在解决方案如下:在表单上放置一个Web浏览器控件,当登录页面加载(documentComplete事件)时,我将登录信息填写在文档中并简单地提交。
现在我可以访问我想要的所有安全页面,但不能使用我放置在代码中的 HttpWebRequest。但是当我在同一表单上放置多个WebBrowserControls时,它们都可以访问站点的安全部分。这就是我放置其中 6 个来执行并行请求(对于 xml 和 html)以快速访问我帐户中的信息的方式。
这实际上就像一个魅力,你很好地看到 7 个浏览器浏览并分析 domdocument,但这自然会产生很多开销,因为我不需要加载图像和所有闪存等(或导致非常烦人的多个文档加载事件的 iFrame)。所以我想登录一次,并能够使用 HttpWebRequest 在代码中使用网络浏览器的会话/cookie 信息请求(或以其他方式登录)。
那么我该怎么做呢?这甚至可能还是我应该完全不同地处理它?
(ps我用C#写所有东西)
您可以显示第一个Web浏览器,登录,并在提交后从中获取cookie并将它们附加到您的HttpWebRequests上。
第一次登录时只显示 Web 浏览器应该可以大大提高您的性能!只注意浏览器验证/异步内容加载。
您不能使用 HttpWebRequests
与WebBrowser
共享同一会话。您需要使用基于 UrlMon
或 WinInet
的 API,这就是WebBrowser
幕后使用的。
我在这里列出了一些选项:https://stackoverflow.com/a/22686805/1768303。
也许,XMLHTTPRequest
COM 对象是最可行的对象。