在网页抓取中浏览多个页面

时间:2019-11-19 11:17:35

标签: c# web-scraping html-agility-pack

我正在研究Web抓取,以从yello页面获取值,并且在遍历页面时,循环功能无法获取页面计数增量。我添加了一个循环,继续显示同一页面上的数据。我在下面附加我的代码。

static void Main(string[] args)
    {
        string webUrl = "https://www.yellowpages.com";
        bool Loop = true;
        HtmlWeb Web = new HtmlWeb();

        //First Url
        HtmlDocument doc = Web.Load(webUrl + "/search?search_terms=software&geo_location_terms=Los+Angeles%2C+CA");
        var HeaderName = doc.DocumentNode.SelectNodes("//a[@class='business-name']").ToList();
        foreach (var abc in HeaderName)
        {
            Console.WriteLine(abc.InnerText);
        }

        //Loop through different pages from the paging of that first url and then keep on doing it until Next button returns nothing
        while (Loop == true)
        {
            var NextPageCheck = doc.DocumentNode.SelectNodes("//a[text()='Next']/@href").ToList();
            if (NextPageCheck.Count != 0)
            {
                string link = webUrl + NextPageCheck[0].Attributes["href"].Value;
                doc = Web.Load(link);
                HeaderName = doc.DocumentNode.SelectNodes("//a[@class='business-name']").ToList();

                foreach (var abc in HeaderName)
                {
                    Console.WriteLine(abc.InnerText);
                }
            }
            else
            {
                Loop = false;
            }
        }
    }

所以我面临的问题是,它继续显示第二页的结果。我希望它可以迭代该页面,直到没有页面编号为止,例如它总共有400页,则应该将该页面的网址改为400 https://www.yellowpages.com/search?search_terms=software&geo_location_terms=Los%20Angeles%2C%20CA&page=2 page = 2

1 个答案:

答案 0 :(得分:0)

在调试代码时,似乎第二次在您寻找商家名称的行上出现空错误,在已安装的HtmlAgilityPack版本中,它对网址进行了编码,所以我只是添加了一个解码到网址

string link = webUrl + NextPageCheck[0].Attributes["href"].Value;
var urlDecode = HttpUtility.HtmlDecode(link);
doc = Web.Load(urlDecode);

它似乎很好用-正如评论在您下次发布时所说的那样,这有助于发布您所遇到的错误以及出现在哪一行,因此更容易,更快捷地查找实际错误

希望这会有所帮助。