延迟后的屏幕抓取网页

Jus*_*tin 1 c# screen-scraping web-scraping c#-4.0

我正在尝试使用C#抓取网页,但是在页面加载后,它会执行一些JavaScript,从而将更多元素加载到需要抓取的DOM中。标准的抓取工具只是在加载时抓取页面的html,而不会提取通过javascript进行的DOM更改。我该如何放置某种功能以等待一两秒钟,然后获取源代码?

这是我当前的代码:

private string ScrapeWebpage(string url, DateTime? updateDate)
        {
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            Stream responseStream = null;
            StreamReader reader = null;
            string html = null;

            try
            {
                //create request (which supports http compression)
                request = (HttpWebRequest)WebRequest.Create(url);
                request.Pipelined = true;
                request.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate");
                if (updateDate != null)
                    request.IfModifiedSince = updateDate.Value;

                //get response.
                response = (HttpWebResponse)request.GetResponse();
                responseStream = response.GetResponseStream();
                if (response.ContentEncoding.ToLower().Contains("gzip"))
                    responseStream = new GZipStream(responseStream, CompressionMode.Decompress);
                else if (response.ContentEncoding.ToLower().Contains("deflate"))
                    responseStream = new DeflateStream(responseStream, CompressionMode.Decompress);

                //read html.
                reader = new StreamReader(responseStream, Encoding.Default);
                html = reader.ReadToEnd();
            }
            catch
            {
                throw;
            }
            finally
            {//dispose of objects.
                request = null;
                if (response != null)
                {
                    response.Close();
                    response = null;
                }
                if (responseStream != null)
                {
                    responseStream.Close();
                    responseStream.Dispose();
                }
                if (reader != null)
                {
                    reader.Close();
                    reader.Dispose();
                }
            }
            return html;
        }
Run Code Online (Sandbox Code Playgroud)

这是一个示例网址:

http://www.realtor.com/realestateandhomes-search/geneva_ny#listingType-any/pg-4

您会看到该页面何时首次加载,显示找到134个列表,然后显示187个属性。

hoj*_*oju 5

为了执行JavaScript,我使用webkit渲染页面,该页面是Chrome和Safari使用的引擎。是使用其Python绑定的示例。

Webkit也有.NET绑定,但是我没有使用过。