09-XPath语言-python爬虫
XPath语言XPath(XMLPathLanguage)是一种XML路径语言,是一种用来定位XML文档中某一部分的语言。学习目的将HTML转换成XML文档后,使用XPath查找HTML节点或元素。例如用“/”作为上下级的分隔。第一个“/”表示文档的根节点(注意不是指文档最外层的tag节点,而是文档本身)。例如,对于HTML文件,最外层的节点应该是“/html”。XPath开发工具开源XPath表达式编辑工具:XMLQuire(可提供XML格式文件)chrome插件XPathHelper在控制台直接输入$x("xpathselector")$x("xpathselector")firefox插件XPathCheckerXPath语法参考文档:http://www.w3school.com.cn/xp...XPath语法XPath是一种用于在XML文档中查找信息的语言。XPath可用于遍历XML文档中的元素和属性。哈利波特29.99LearningXML39.95选择节点XPath使用路径表达式选择XML文档中的节点。通过以下路径或步骤选择节点。下面列出了最有用的路径表达式:表达式描述/从根节点选择。nodename选择该节点的所有子节点。//从当前节点中选择匹配文档中的所有节点。选择当前节点。..选择当前节点的父节点。@pick属性。示例在下表中,我们列出了一些路径表达式及其结果:路径表达式结果/bookstore选择根元素bookstore。注意:如果路径以正斜杠(/)开头,则路径始终表示元素的绝对路径!bookstore选择bookstore元素的所有子节点。默认情况下,从根节点选择bookstore/book会选择作为bookstore子元素的所有book元素。//book选择所有book子元素,无论它们在文档中的位置如何。//book/./title选择所有book子元素,从当前节点找到title节点//price/..选择所有book子元素,从当前节点找到父节点bookstore//book选择所有属于bookstore元素后代的书籍,无论它们位于bookstore下的何处。//@lang选择所有名为lang的属性。谓词谓词用于查找包含指定值的特定信息或节点。所谓“谓词条件”,就是把路径表达式附加条件的谓词嵌入方括号中,全部写在方括号“[]”中,表示对节点进行进一步过滤。示例在下表中,我们列出了一些带有谓词的路径表达式,表达式的结果:pathexpressionresult/bookstore/book[1]选择作为bookstore子元素的第一个book元素。/bookstore/book[last()]选择作为bookstore子元素的最后一个book元素。/bookstore/book[last()-1]选择作为bookstore子元素的倒数第二个book元素。/bookstore/book[position()<3]选择作为bookstore元素子元素的前两个book元素。//title[@lang]选择所有具有名为lang的属性的标题元素。//title[@lang='eng']选择所有lang属性值为eng的标题元素。//book[price]选取所有book元素,选取的book元素必须有price子元素/bookstore/book[price>35.00]选取bookstore元素的所有book元素,price元素的值必须更大超过35.00。/bookstore/book[price>35.00]/title选取bookstore元素中book元素的所有title元素,price元素的值必须大于35.00。选择未知节点XPath通配符可用于选择未知的XML元素。通配符描述*匹配任何元素节点。@匹配任何属性节点。示例在下表中,我们列出了一些路径表达式及其结果:路径表达式结果/bookstore/选择bookstore元素的所有子元素。//选择文档中的所有元素。//title[@*]选择所有有属性的title元素。选择多个路径您可以使用“|”选择多个路径路径表达式中的运算符。示例在下表中,我们列出了一些路径表达式,以及这些表达式的结果:路径表达式结果//book/title//book/price选择了book元素的所有title和price元素。//title//price选择文档中的所有title和price元素。/bookstore/book/title//price选择所有属于bookstore元素的title元素,以及文档中的所有price元素。XPath高级用法模糊查询包含目前很多web框架都是动态生成界面元素id的,所以每次操作同一个界面,id都会发生变化,这对自动化测试有一定的影响。div="4392086方法使用匹配函数xpath的,//input[contains(@id,'nt')]XML张成斌cbcye@live.comhttp://cbcye.cnblogs.comGaryZhangGaryZhang@cbcye.comhttp://www.quicklearn.cn查询所有Blog节点值中带cn字符串的Person节点Xpath表达式:/Root//Person[contains(Blog,'cn')]查询所有带cn的Person节点Blog节点值中的字符串和属性ID值中的01Xpath表达式:/Root//Person[contains(Blog,'cn')andcontains(@ID,'01')]学习笔记1.依靠自己的属性,文本定位//td[text()='DataImport']//div[contains(@class,'cux-rightArrowIcon-on')]//a[text()='立即注册']//输入[@type='radio'and@value='1']多个条件//span[@name='bruce'][text()='bruce1'][1]多条件//span[@id='bruce1'ortext()='bruce2']查找多个//span[text()='bruce1'andtext()='bruce2']2.依赖父节点定位//div[@class='x-grid-col-namex-grid-cell-inner']/div//div[@id='dynamicGridTestInstanceformclearuxformdiv']/div//div[@id='test']/input3.依赖子节点定位//div[div[@id='navigation']]//div[div[@name='listType']]//div[p[@name='testname']]4.Hybrid//div[div[@name='listType']]//img//td[a/font[contains(text(),'seleleium2Startvideofromscratch')]]//input[@type='复选框']5。进阶部分//input[@id='123']/following-sibling::input寻找下一个兄弟节点//input[@id='123']/preceding-sibling::span上一个兄弟节点//input[starts-with(@id,'123')]以什么开头//span[not(contains(text(),'xpath'))]不包含xpath字段的span6.index//div/input[2]//div[@id='position']/span[3]//div[@id='position']/span[positiontion()=3]//div[@id='position']/span[position()>3]//div[@id='position']/span[position()<3]//div[@id='position']/span[last()]//div[@id='position']/span[last()-1]7.substring截取判断
//*[substring(@id,4,5)='Every']/@id截取这个属性定位到3,取一个长度为5的字符//*[substring(@id,4)='EveryCookieWrap']截取位置3到最后一个字符的属性//*[substring-before(@id,'C')='swfEvery']/@之前id属性'C'匹配的字符//*[substring-after(@id,'C')='ookieWrap']/@id属性'C'之后的字符匹配8.通配符*//span[@*='bruce']//*[@name='bruce']9.axis//div[span[text()='+++当前节点']]/parent::div找到父节点//div[span[text()='+++当前节点']]/ancestor::div查找祖先节点10.孙子节点//div[span[text()='currentnote']]/descendant::div/span[text()='123']//div[span[text()='currentnote']]//div/span[text()='123']两个表达式意思相同11.followingpre//span[@class="fkfk_cur"]/../following::a下面的所有axpath//span[@class="fkfk_cur"]/../preceding::a[1]上面的所有axpath提取写爬虫的时候,多个标签下的文字往往会使得使用xpath提取数据,代码如下:
大家好! 使用xpath提取非常方便。假设网页源码在selector中:data=selector.xpath('//div[@id="test1"]/text()').extract()[0]可以提取"Helloeveryone!”到数据变量。但是,如果遇到下面的代码怎么办?