XPath常见使用

2019-02-13  本文已影响4人  嫌疑人zx

XPath表达式


面对较大的文档,你可能需要写很长的XParh表达式,为了避免这一点,两个斜杠线//可以访问到所有的同名元素。列如,//p可以选择所有的p元素,//a可以选择所有的链接。

eg:

 <a href="http://www.iana.org/domains/example">More information...</a> 

只选择链接:

 $x('//a/@href')
 [href="http://www.iana.org/domains/example"]

只选择文字:

 $x('//a/text()')
 ["More information..."]

常见工作


 $x(//h1[@id="firstHeading"]/span/text())
 $x(//div[@id="toc"]/ul//a/@href)
 $x(//*[contains(@class,"ltr") and contains(@class,"skin-vector")]//h1//text())
 $x(//table[@class="infobox"]//img[1]/@src)
 $x(//div[starts-with(@class,"reflist")]//a/@href)
 $x(//*[text()="References"]/../following-sibling::div//a)
 $x(//img/@src)

提前应对网页发生的改变


爬取的目标网页位于远程服务器,这意味着,他的HTML会发生改变。XPath表达式就会失效。一些基本原则,可以帮助我们降低表达式失效的概率:

$x(//*[@id="myid"]/div/div/div[1]/div[2]/div/div[1]/div[1]/a/img)

解决方法:尽量找到离目标标签近的元素,根据元素的id或者class属性,进行抓取。id通常是最靠谱的!

上一篇 下一篇

猜你喜欢

热点阅读