当我们用HtmlAgilityPack去抓取一个已知网页的的数据时,分析网页的时候会用到XPath,可是这个我不是很懂,百度了一下,也没整得太明白。还好意外发现了一个东西。
先贴一段代码,下面就是我在抓取一个页面时的解析代码,看看那些XPath,看上去基本能理解,可是自己想要去写的时候就麻烦。
var htmlDoc = fromWeb($@"http://cq.xxxxxx.com{item.Href}");
var shopId = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='bhsj']/span[1]/pn").InnerText;
var title = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='title']").InnerText;
var price = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='je']/li[1]/span[1]/b").InnerText;
var area = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='jzmj']/li[1]/span/b").InnerText;
var district = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='qy']/p[2]/a[1]/span").InnerText;
var longitude = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='longitude']").InnerText;
var latitude = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='latitude']").InnerText;
var address = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='qy']/p[3]/span").InnerText;
var buildingName = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='qy']/p[1]/a/span").InnerText;
所有我发现了这个,在网页上F12找到对应要解析的位置,或者鼠标选择想要解析的地方,右键->检查,注意我用的是edge浏览器,Google浏览器一样可以
上图中复制XPath的结果: //*[@id="activity-name"]
上图中复制完整XPath的结果:/html/body/div[1]/div[2]/div[1]/div/div[1]/h1
两个都能用,效果一样,可根据不通的应用场景选择是否用完整的XPath
这样多用几次慢慢都能看懂是什么意思了。