如何在c#中获取完整的网页HTML?

时间:2017-06-26 15:23:17

标签: c# html ajax selenium web-scraping

我正在尝试制作一个网络浏览器来收集新闻文章但是我无法获取网页的完整html内容。 Here is the url我最初需要搜索文章搜索结果:

然后,我刮掉每篇文章(example)。

我尝试过使用WebRequest,HTTPWebRequest和WebClient来发出请求,但是每次返回的结果只包含侧边栏的html内容等等。我使用过Chrome开发人员工具,返回的html就在之后开始页面的主要内容,因此是无益的。我也在寻找内容的ajax调用,但却找不到任何内容。

我已经成功地使用Selenium Webdriver来抓取所需的内容,但这并不理想,因为访问每个网址的速度要慢得多,并且它经常会挂起加载页面。任何有关请求页面的完整html内容的帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我不确定你遇到了什么问题,但这里是我如何完成你的任务的。

首先,我在网络浏览器中查看了该页面,并在开发人员工具中打开了网络标签。

从这里我收集了我的真实浏览器发送的标题列表。然后我构建了一个附加后续头文件的HttpWebRequest,并能够检索页面的完整html。

public string getHtml()
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.fa-mag.com/search.php?and_or=and&date_range=all&magazine=&sort=newest&method=basic&query=ubs");

    req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0";
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    req.AllowAutoRedirect = false;
    req.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.5");
    req.Headers.Add("cookie", "analytics_id=595127c20cdfe6.52043028595127c20ce022.71834842; PHPSESSID=tbbo7npldsv26n2q7pg2728k77; D_IID=3E4FEA7F-9794-34EE-99F8-87EEA3DF0689; D_UID=5F374D94-270D-3653-8C54-9A46F381EAE2; D_ZID=505BB8EF-5A2D-3CBD-87D8-FABAD5014776; D_ZUID=BB0C9EF2-0E7B-383E-A03A-A3E92CC8051A; D_HID=9642D775-D860-3F04-8720-73E5339042BA; D_SID=63.138.127.22:6Ci6jv2Xv+yum3m9lNfnyRcAylne67YfnS/u8goKrxQ");
    req.Headers.Add("DNT", "1");
    req.Headers.Add("Upgrade-Insecure-Requests", "1");
    HttpWebResponse res = null;
    try
    {
        res = (HttpWebResponse)req.GetResponse();
    }
    catch (WebException webex)
    {
        res = (HttpWebResponse)webex.Response;
    }

    string html = new StreamReader(res.GetResponseStream()).ReadToEnd();
    return html;
}

如果没有自定义标头,页面上会发送机器人保护,发送416响应并进行重定向。如果您在重定向页面中阅读了html,则表明该网站已将您检测为机器人。