我经常去某个网站查找资料。我心想:“等等。我可以编程。当我可以编写一个为我做这件事的软件时,为什么我要手动访问这个网站呢?”。
于是我开始了。我使用的是 C#,所以我找到了 WebClient 和 Uri。
我已经设法获取该网站的源代码,但出现的问题是,我正在查找的特定数据是在源代码加载后通过 AJAX 生成的。
这就是我的问题。如果需要首先通过 AJAX 调用请求该代码,我如何获取该代码?
一般的做法是这样的:
- 使用类似的工具Fiddler http://fiddlertool.com/,找出浏览器发出哪些 HTTP 请求以获取您要查找的数据。
- use 网络客户端 http://msdn.microsoft.com/en-us/library/system.net.webclient(VS.80).aspx获取您需要的 HTTP 请求。
看看我的回答这个问题 https://stackoverflow.com/questions/1471062/c-webclient-view-source-question/1521292#1521292有关 HTML 屏幕抓取的更多信息以及如何解决您可能遇到的各种问题。
对于上面的#1,以下是如何使用 fiddler 来了解特定请求是如何发出的:
首先,找到您关心的请求(在其响应中包含您想要的数据的请求)。您可以通过在 fiddler 的左窗格中双击每个请求并查看右下窗格中的“text fiew”选项卡来检查每个请求来完成此操作。您还可以使用 CTRL+F 在多个请求中查找内容,但某些请求会被压缩,因此如果您想确保可以发送文本,您需要确保在发出请求之前在工具栏中选择“自动解码”按钮 -搜索所有这些。
找到所需的请求后,在 Fiddler 中双击它,然后选择右上角窗格中的“标头”选项卡。这些是正在发送的标头。如果您的客户端将这些标头发送到服务器,您应该返回相同的数据。但通常并不需要所有标头,因此您需要弄清楚需要哪些标头。您可以使用右上方窗格中的 Fiddler 的 Request Builder 选项卡来执行此操作。选择该选项卡并将数据请求从左侧窗格拖到请求构建器上。然后提交请求以验证它是否返回正确的结果。然后开始删除标头,一次一个标头,直到请求停止工作 - 您知道该标头是必需的。尝试删除每个标头,直到找到所需的标头。
然后,您需要编写代码来生成正确的标头。不用担心Host:
标头,这是自动为您生成的。为了Cookie:
标头,您需要使用以下命令生成它CookieContainer
班级。对于其他标头(例如 UserAgent:、Accept: 等,您通常可以复制它们并将它们按原样添加到您的请求中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)