php 抓取网页 源码(之前做项目要从一个网页中抓取某些特定信息)
优采云 发布时间: 2021-12-10 03:34php 抓取网页 源码(之前做项目要从一个网页中抓取某些特定信息)
在做一个项目之前,我想从一个网页中获取一些特定的信息。本来打算直接用java+HtmlPraser来做结果的。想抓的部分出不来。在研究了那个网页的源代码后,我得出了结论。该网页使用ajax技术隐藏了部分信息。这部分信息只有在用户浏览页面时才会显示。然后想看看有没有什么开源项目可以模拟浏览。结果没有找到。我别无选择,只能切换到 c# 平台。
c#中WebBrowser的控件起到了模拟浏览器的作用,使用起来非常简单。
创建一个新的表单应用程序。向窗体添加一个 WebBrowser 控件。设置控件的属性 url。你要解析的网页的网址必须填写
然后双击控件,您将转到
private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
函数内部
查看函数分析知道这个函数是在控件加载网页后执行的
也就是说,你需要在这个函数里写来获取网页的信息
一开始我也是直接在这个函数里写了处理代码,但是我发现抓到的信息只是其中的一小部分。
后来百度发现,是因为这个控件其实在设计上有一些不足。很多时候动态加载的网页还没有完全打开。
web_DocumentCompleted()函数会开始执行,导致控件显示的页面源代码与实际页面的源代码不一致
有一些解决方案,虽然不是完整的解决方案,但是可以提高打开类似ajax网页的完成度。
方法是
private void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (web0.ReadyState == WebBrowserReadyState.Complete)
{
}
}
添加一个判断这个判断可以更好的保证控件在加载了大部分目标页面信息后执行下面的代码
原理不是很清楚,但实验证明,捕获的目标数据量确实增加了。
因此,如果想抓取更多的数据,可以使用定时器每次对网页进行分析,增加抓取的数据量。
简单的说就是控制定时器和WebBrowser的Navigate方法的结合。