【问题标题】:Xpath returns null Web ScrapingXpath 返回 null Web Scraping
【发布时间】:2018-03-21 19:01:36
【问题描述】:

我正在执行网络抓取,我尝试了所有可能的组合,但 XPath 返回 null 值。

我删除了方括号并为其添加了//,但它每次都返回null。 这些是实际的 XPath,我附上了我在代码中使用的格式化的 XPath。

//*[@id="agent_list_wrapper"]/div[2]/div[2]/div/div[1]/a
//*[@id="agent_list_wrapper"]/div[2]/div[2]/div/div[3]

下面是我的代码。

private async Task<List<NameAndphone>> WebDateFromPage(int pagenum)
{
    string url = "http://www.realtor.com/realestateagents/New-York_NY/photo-1";

    if (pagenum != 0)
        url = "http://www.realtor.com/realestateagents/New-York_NY/photo-1/pg-" + pagenum.ToString();

    var doc = await Task.Factory.StartNew(() => web.Load(url));
    var name = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div/div//a");
    var phone = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div//div");
    if (name == null || phone == null)
        return new List<NameAndPhone>();

    var names = name.Select(node => node.InnerText);
    var phones = phone.Select(node => node.InnerText);

    return names.Zip(phones, (name, phone) => new NameAndPhone() { Name = name, Phone = phone }).ToList();
}

【问题讨论】:

  • 能否确认xml文件中确实存在xpath?你能发布一个sn-p XML 文档吗?
  • 你能详细说明你到底想要什么。我是新手,对此我不太了解,如果你能在这方面帮助我,我将非常感激
  • 我已经编辑了我的代码,我正在尝试从附加的网站获取姓名和电话号码
  • 我不确定如何读取 xml 结构。你能指导我一下吗?
  • 当我将鼠标悬停在文本字段上并检查值时,我得到了完整的网站内容。

标签: c# html xpath linq-to-xml


【解决方案1】:

您的XPATH 似乎工作正常(尽管数据本身需要一些清理)。使用此代码进行测试:

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.OptionFixNestedTags = true;
doc.Load("data.xml");

var name = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div/div//a");
var phone = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div//div");


var names = name.Select(node => node.InnerText);
var phones = phone.Select(node => node.InnerText);

var result = names.Zip(phones, (n, p) => new { Name = n, Phone = p }).ToList();
//Result has 58 items

将此网址用于测试数据:http://www.realtor.com/realestateagents/New-York_NY/photo-1/pg-1


我建议您重新考虑您的 XPATH,因为它非常具体并且取决于结构。尝试使用以下属性:itemprop="name"itemprop="telephone" - 如果他们更改网站布局,则不太可能更改

【讨论】:

    【解决方案2】:

    使用以下代码实现

    谢谢

    string url_base=@"http://www.realtor.com/realestateagents/New-York_NY/photo-1/pg-";
    function GetPageContent(int page_no)
    {
       return new System.Net.WebClient().DownloadString(url_base+page_no);
    }
    var file_path=@"C:\Dump\Data.xml";
    
    var content=GetPageContent(1);
    
    System.IO.File.WriteAllText(file_path,content);
    
    
    HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
    doc.OptionFixNestedTags = true;
    doc.Load(file_path);
    
    var name = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div/div//a");
    var phone = doc.DocumentNode.SelectNodes("//*[@id=\"agent_list_wrapper\"]//div//div//div//div");
    
    
    var names = name.Select(node => node.InnerText);
    var phones = phone.Select(node => node.InnerText);
    
    var result = names.Zip(phones, (n, p) => new { Name = n, Phone = p }).ToList();
    //Result has 58 items
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2019-05-03
      • 1970-01-01
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多