0

如果您访问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。我单击“文件”,然后单击“新建项目”,然后在“已安装 -> 模板 -> Visual C# -> Windows -> 控制台应用程序”下,然后按“确定”。应该会出现一个名为 Program.cs 的新页面。将代码粘贴到窗口中,覆盖已经存在的内容。下载 HtmlAgilityPack。我从 htmlagilitypack.codeplex.com 获得了我的现在单击“项目”,然后单击“添加参考”。弹出参考管理器后,单击“浏览”,然后单击弹出窗口右下方的“浏览”。导航到您下载的 HtmlAgilityPack 的 Net45 文件夹中的 HtmlAgilityPack.dll。现在按“确定”并按 F5。应该像魅力一样工作。--<

4

1 回答 1

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);
        }
    }
}
于 2013-09-07T19:34:21.830 回答