C#代码仅获取可见页面的pagesource,而不是向下滚动页面

时间:2013-09-06 23:41:00

标签: c# html visual-studio-2012

如果您转到http://dota-trade.com/equipment?order=name并向下滚动,则可以看到如果向下滚动到页面底部,则会加载更多项目。以下代码从网页中获取所有链接并将其保存到文本文件中。现在它只抓住所有可见的链接。如何抓取所有链接,包括向下滚动时显示的链接?

如果您知道更好的方式来描述我的要求,请编辑我的帖子,您完全有权根据您的喜好编辑任何内容。谢谢。

using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient wc = new WebClient();
            var sourceCode = wc.DownloadString("http://dota-trade.com/equipment?order=name");
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(sourceCode);
            var node = doc.DocumentNode;
            var nodes = node.SelectNodes("//a");
            List<string> links = new List<string>();
            foreach (var item in nodes)
            {
                var link = item.Attributes["href"].Value;
                links.Add(link.Contains("http") ? link : "http://dota-trade.com" +link);
                Console.WriteLine(link.Contains("http") ? link : "http://dota-trade.com" + link);
            }
            System.IO.File.WriteAllLines(@"C:\Users\Public\WriteLines.txt", links);
        }
    }
}

附加信息:这是我从头到尾所做的一切:

我使用的是Microsoft Visual Studio Ultimate 2012 RTM。我安装了它(花了差不多2个小时)。我启动了Visual Studio 2012.然后单击“文件”,然后单击“新建项目”,然后单击“已安装 - >模板 - &gt; Visual C# - &gt; Windows - &gt;控制台应用程序”,然后按“确定”。应该出现一个名为Program.cs的新页面。将代码粘贴到窗口中,覆盖已存在的内容。下载HtmlAgilityPack。我从htmlagilitypack.codeplex.com获得了我的。现在点击“Project”然后点击“Add Reference”。弹出参考管理器后,单击“浏览”,然后单击弹出窗口右下角的“浏览”。导航到您下载的HtmlAgilityPack的Net45文件夹中的HtmlAgilityPack.dll。现在按“确定”并按F5。应该像魅力一样工作。 -

1 个答案:

答案 0 :(得分:0)

using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient wc = new WebClient();
            var sourceCode = wc.DownloadString("http://dota-trade.com/equipment?order=name");
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(sourceCode);
            var node = doc.DocumentNode;
            var nodes = node.SelectNodes("//a");
            List<string> links = new List<string>();
            foreach (var item in nodes)
            {
                var link = item.Attributes["href"].Value;
                links.Add(link.Contains("http") ? link : "http://dota-trade.com" +link);
            }
            int index = 1;
            while (true)
            {
                sourceCode = wc.DownloadString("http://dota-trade.com/equipment?order=name&offset=" + index.ToString());
                doc = new HtmlDocument();
                doc.LoadHtml(sourceCode);
                node = doc.DocumentNode;
                nodes = node.SelectNodes("//a");
                var cont = node.SelectSingleNode("//tr[@itemtype='http://schema.org/Thing']");
                if (cont == null) break; 
                foreach (var item in nodes)
                {
                    var link = item.Attributes["href"].Value;
                    links.Add(link.Contains("http") ? link : "http://dota-trade.com" + link);
                }
                index++;
            }
            System.IO.File.WriteAllLines(@"C:\Users\Public\WriteLines.txt", links);
        }
    }
}