从动态网站获取数据

时间:2016-02-19 20:25:58

标签: c# asp.net angularjs parsing web-crawler

我们有一个旧的Windows窗体应用程序,使用类似于以下的代码

using System.Net;
using System.IO;
using System.Windows.Forms;

string result = null;
string url = "http://www.despegar.cl/shop/flights/results/oneway/ANF/SCL/2016-03-30/1/0/0?from=SB";
WebResponse response = null;
StreamReader reader = null;

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "GET";
    response = request.GetResponse();
    reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    result = reader.ReadToEnd();
}
catch (Exception ex)
{
    // handle error
    MessageBox.Show(ex.Message);
}
finally
{
    if (reader != null)
        reader.Close();
    if (response != null)
        response.Close();
}

从despegar cl获取外部网站的源代码,然后获取航班起飞时间表的数据。 问题在于使用AngularJS等框架的页面在运行时替换这些字段。获得的源代码类似于

<span class="hour">{{data.departure.hour.formatted}}</span>

当我们想要找到

<span class="hour">09:05</span>

如何使用动态字段更新获取数据?

2 个答案:

答案 0 :(得分:0)

使用Angular或其他Javascript框架构建的网页在很大程度上无法使用Javascript来处理视图。您最好的选择是运行无头浏览器并抓取生成的HTML。

根据服务器的不同,您可以申请预渲染版本。一些Angular站点为搜索引擎目的这样做,因为搜索引擎爬虫也不运行Javascript并面临您现在所遇到的相同问题。您将需要检查您查询的任何服务,看看是否可以选择。

答案 1 :(得分:0)

您可以随时打开网络查看器并查看它是否从特定端点提取数据,您可能能够设置客户端以达到终点。可能是背景中的json流或xml流。不久前我不得不这样做,发现了一个隐藏的api等价物,我能够查询。