作者:hacker发布时间:2022-07-17分类:黑客教程浏览:132评论:2
这种xml只是带了命名空间,解析出来就行。
解决办法如下,中文部分你自己替换下你的xml对应的字符串:
InputStream is=loader.getResourceAsStream("你的xml地址");
Document doc= Dom4jUtil.loadXml(is);
HashMap nsMap=new HashMap();
nsMap.put("soap","第一个网址贴在这里");
nsMap.put("ns2","第二个网址贴在这里");
XPath xpath=doc.createXPath("/soap:Envelope/soap:Body/ns2:processResponse/response");
xpath.setNamespaceURIs(nsMap);
Node node= xpath.selectSingleNode(doc);
然后就可以正常取值了。
如果你是在浏览器 开发工具 提取的xpath,很多情况下是不能用到scrapy中的,
因为浏览器看到的dom树可能是js脚本动态修改过的(这种情况非常常见),你需要直接查看html源码,分析。
网页解析工具psychoxpath使用方法如下:
每一个写爬虫、或者是做网页分析的人,相信都会因为在定位、获取xpath路径上花费大量的时间,甚至有时候当爬虫框架成熟之后,基本上主要的时间都花费在了页面的解析上。在没有这些辅助工具的日子里,我们只能通过搜索html源代码,定位一些id去找到对应的位置,非常的麻烦,而且经常出错。这里介绍一个chrome的xpath辅助插件给大家。
先给到下载链接:xpath-helper
安装好之后,我们重新打开浏览器,按ctrl+shift+x就能调出xpath-helper框了。界面如下:
如果我们要查找某一个、或者某一块元素的xpath路径,可以按住shift,并移动到这一块中,上面的框就会显示这个元素的xpath路径,右边则会显示解析出的文本内容,并且我们可以自己改动xpath路径,程序也会自动的显示对应的位置,可以很方便的帮助我们判断我们的xpath语句是否书写正确。
虽然这个小插件使用非常方便,但它也不是万能的,有两个问题:
1.XPath Helper 自动提取的 XPath 都是从根路径开始的,这几乎必然导致 XPath 过长,不利于维护;
2.当提取循环的列表数据时,XPath Helper 是使用的下标来分别提取的列表中的每一条数据,这样并不适合程序批量处理,还是需要人为修改一些类似于*标记等。
不过,合理的使用Xpath,还是能帮我们省下很多时间的!
1、Xpath也可以使用元素的属性值来定位,以百度输入框和搜索按钮为例
2、通过id属性值来定位:注释://表示在当前页面的某个目录下,input表示定位元素的标签名,[@id='kw'],表示这个元素的id属性值等于kw
3、通过name和class属性值来定位:如果不想指定标签名,则也可以用*代替,当然,使用Xpath不局限于id,name和class这三个属性值,元素的任意属性值都可以使用,只要它是唯一的标识元素
4、层级与属性结合。如果一个元素本身没有可以唯一标识这个元素的属性值,那么我们可以找到其上一级元素,如果它的上一级有唯一可以标识属性的值,也可以拿来使用
5、使用逻辑运算符。如果一个属性不能唯一地区分一个元素,我们还可以使用逻辑运算符连接多个属性来查找元素。例如,假如要查找第一行元素,则:
xpath 的语法 element = driver.find_element_by_xpath(xpath)
1 路径以“/”开始 表示找到满足该绝对路径的元素;
2 路径以//element”开始 表示找到文档中所有满足“//”后规则的元素 如//element 表示找到所有element元素,我们推荐使用相对定位
3 路径以//* 表示所有 如//* 表示选择所有元素;
4 可以用个属性来定位 //element[@ 属性="值"] 来进行定位
5 通过层级来进行定位 //element[@属性='值'] / 子元素
如果想了解更多,可以到传智播客官网看看。
查找所有book节点(xpath: //book),对每个节点分析其属性,MSXML都有相关的函数.
MSXMLNS::IXMLDOMNodeListPtr pNodeList = NULL;
MSXMLNS::IXMLDOMNamedNodeMapPtr methodpAttrs = NULL;
MSXMLNS::IXMLDOMNodePtr pmethodAttrItem;
MSXMLNS::IXMLDOMNodePtr psNode;
MSXMLNS::IXMLDOMNodePtr requiredNode;
pNodeList = m_pDomDoc-selectNodes((_bstr_t)"//book");
int num = pNodeList-Getlength();
long nCount = 0;
for(int i=0;inum;i++)
{
psNode=pNodeList-Getitem(i);//取得psNode的节点值
psNode-get_attributes(methodpAttrs);
methodpAttrs-get_length(nCount);
for(int nmethod = 0; nmethod nCount; nmethod++) //属性值的循环
{
methodpAttrs-get_item(nmethod,pmethodAttrItem);
CString strgetName = FromBSTR((_bstr_t)pmethodAttrItem-nodeName);
CString strgetValue = FromBSTR((_bstr_t)pmethodAttrItem-nodeTypedValue);//得到属性值后进行相应的操作
}
}
标签:xpath定位工具
已有2位网友发表了看法:
访客 评论于 2022-07-17 23:24:09 回复
m-nodeTypedValue);//得到属性值后进行相应的操作 }}
访客 评论于 2022-07-18 06:31:32 回复
麻烦,而且经常出错。这里介绍一个chrome的xpath辅助插件给大家。先给到下载链接:xpath-helper安装好之后,我们重新打开浏览器,按ctrl+shift+x就能