使用HttpClient和浏览器时收到不同的响应

时间:2015-06-18 03:46:19

标签: c# httpclient

我正试图抓住网站,但是当我尝试使用这种方法时

    static async void DownloadPageAsync(string url)
    {
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
        client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
        client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");
        HttpResponseMessage response = await client.GetAsync(url);
        Thread.Sleep(30000);
        response.EnsureSuccessStatusCode();
        var responseStream = await response.Content.ReadAsStreamAsync();
        var streamReader = new StreamReader(responseStream);
        var str = streamReader.ReadToEnd();

    }

我收到了这个回复 enter image description here

但是当我通过chrome尝试相同的链接时,我回复了这个.. enter image description here

我哪里错了..如何通过代码获取chrome响应...请帮忙.. 问候 塔瓦

1 个答案:

答案 0 :(得分:0)

所以,首先:抓取网页并不是一件轻而易举的事。特别正确的HTML解析非常棘手。

在开始编写网络抓取工具之前,您还应该了解一些有关网络抓取的网络礼节。其中一个特别是写下如何在浏览器中查找有关您的网络爬虫的更多信息的详细信息。换句话说,不要这样做,但要让它变得更加华丽 - 即使你需要“壁虎”这样的东西。由于浏览器检测,在'(' ...')'之间放置一些东西是合适的。

client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");

在网络爬虫中难以处理的一件事是AJAX调用。拥有不正确的用户代理可能会使情况变得更糟,一些网站决定是否使用基于浏览器功能的AJAX。对于这个问题的上下文,最好简单地假设你无法在你的爬虫中正确处理Javascript或AJAX(虽然事实更复杂,这里描述的时间太长了......)。

了解一些股票网站,我认为这也是你的问题。这些数字通常使用AJAX实时刷新。