我正在研究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
答案 0 :(得分:0)
在调试代码时,似乎第二次在您寻找商家名称的行上出现空错误,在已安装的HtmlAgilityPack版本中,它对网址进行了编码,所以我只是添加了一个解码到网址
string link = webUrl + NextPageCheck[0].Attributes["href"].Value;
var urlDecode = HttpUtility.HtmlDecode(link);
doc = Web.Load(urlDecode);
它似乎很好用-正如评论在您下次发布时所说的那样,这有助于发布您所遇到的错误以及出现在哪一行,因此更容易,更快捷地查找实际错误
希望这会有所帮助。