为什么爬虫不跳转下一页
本文关键字:一页 爬虫 为什么 | 更新日期: 2023-09-27 17:50:58
我已经做了这个爬虫,我想知道为什么我的代码去下一页不工作。下面是代码
var pessoaFinder = new ABCTelefonosPessoasLinkFinder();
var pessoaContent = new ABCTelefonosPessoasContentFinder();
var Urls = DadoPo.ListarUrls();
foreach (var url in Urls)
{
var tempPessoas = new List<string>();
tempPessoas.AddRange(pessoaFinder.Find(url));
foreach (var linkPessoa in tempPessoas)
{
var infoPessoa = new List<DadoTo>();
infoPessoa.AddRange(pessoaContent.Find(url + linkPessoa));
foreach (var pessoa in infoPessoa)
{
if (DadoPo.VerificaLink(url + linkPessoa))
{
continue;
}
DadoPo.Salvar(pessoa);
}
}
}
}
这个函数调用调用查找链接的函数,并转到下一页。这里有一个功能,查找人员信息,并转到下一页(我认为错误是)。
public string[] Find(string url)
{
var webGet = new HtmlWeb();
var document = webGet.Load(url);
var nodes = document.DocumentNode.SelectNodes("//div[@id='mainContent']/div/a");
if (nodes == null)
{
return new string[0];
}
foreach (var node in nodes)
{
var href = node.GetAttributeValue("href", "");
cidades.Add(href);
}
var elUrlProximaPagina = document.DocumentNode.SelectSingleNode("//div[@id='mainContent']/div[@class='paginado']/div/*[contains(@class,'previous')]");
if (elUrlProximaPagina == null)
{
return cidades.ToArray();
}
var urlProximaPagina = elUrlProximaPagina.GetAttributeValue("href", "");
if (!String.IsNullOrEmpty(urlProximaPagina))
{
return Find(urlProximaPagina);
}
return cidades.ToArray();
}
}
请尽快回答。非常感谢。
一个可能的问题是,写入SelectSingleNode("//blah")
将导致每次从根节点搜索文档,并且无论从哪个节点开始搜索,它总是返回第一个匹配的结果。这将导致您不断选择一个节点并重新爬行它。您应该使用.//
语法来指定您正在从当前节点搜索:SelectSingleNode(".//blah")
.
document.DocumentNode.SelectSingleNode(".//div[@id='mainContent']/div[@class='paginado']/div/*[contains(@class,'previous')]");
您还必须修复代码中的所有其他XPATH选择器,以便从当前节点进行选择,而不是从根节点。