Java 在webharvestxml中使用regex
我正在使用web harvest来废弃一些电子商务网站。我正在迭代搜索页面,并在输出xml中获取每个产品的详细信息。但现在我想在废弃和获取特定字符串时在锚(a)标记中使用正则表达式。即Java 在webharvestxml中使用regex,java,xml,regex,webharvest,Java,Xml,Regex,Webharvest,我正在使用web harvest来废弃一些电子商务网站。我正在迭代搜索页面,并在输出xml中获取每个产品的详细信息。但现在我想在废弃和获取特定字符串时在锚(a)标记中使用正则表达式。即 let $linktoprod :=data($item//a[@class="fk-anchor-link"]/@href) 上行返回每个产品的锚定标签href值,即,对于第一个产品,返回的值为 /casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WA
let $linktoprod :=data($item//a[@class="fk-anchor-link"]/@href)
上行返回每个产品的锚定标签href值,即,对于第一个产品,返回的值为
/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&ref=6df83d8f-f61f-4648-b846-403938ae92fa
现在我想使用正则表达式,比如/([^/\?]+)\?获取最后/和之间的字符串?i、 e
itmdaqmvzyy23hz5
在输出xml中。
请任何对此有任何想法的人帮助我。
多谢各位
更新-
<?xml version="1.0" encoding="UTF-8"?>
<config charset="ISO-8859-1">
<function name="download-multipage-list">
<return>
<while condition="${pageUrl.toString().length() != 0}" maxloops="${maxloops}" index="i">
<empty>
<var-def name="content">
<html-to-xml>
<http url="${pageUrl}"/>
</html-to-xml>
</var-def>
<var-def name="nextLinkUrl">
<xpath expression="${nextXPath}">
<var name="content"/>
</xpath>
</var-def>
<var-def name="pageUrl">
<template>${sys.fullUrl(pageUrl.toString(), nextLinkUrl.toString())}</template>
</var-def>
</empty>
<xpath expression="${itemXPath}">
<var name="content"/>
</xpath>
</while>
</return>
</function>
<var-def name="products">
<call name="download-multipage-list">
<call-param name="pageUrl">http://www.flipkart.com/watches/pr?sid=reh%2Cr18</call-param>
<call-param name="nextXPath">//a[starts-with(., 'Next')]/@href</call-param>
<call-param name="itemXPath">//div[@class="product browse-product "]</call-param>
<call-param name="pids"></call-param>
<call-param name="maxloops">5</call-param>
</call>
</var-def>
<var-def name="scrappedContent">
<!-- iterates over all collected products and extract desired data -->
<![CDATA[ <catalog> ]]>
<loop item="item" index="i">
<list><var name="products"/></list>
<body>
<xquery>
<xq-param name="item" type="node()"><var name="item"/></xq-param>
<xq-expression><![CDATA[
declare variable $item as node() external;
let $linktoprod :=data($item//a[@class="fk-anchor-link"]/@href)
let $name := data($item//div[@class="title"])
return
<product>
<link>{$linktoprod}</link>
<title>{normalize-space($name)}</title>
</product>
]]></xq-expression>
</xquery>
</body>
</loop>
<![CDATA[ </catalog> ]]>
</var-def>
</config>
${sys.fullUrl(pageUrl.toString(),nextLinkUrl.toString())}
http://www.flipkart.com/watches/pr?sid=reh%2Cr18
//a[以(,'Next')开头]/@href
//div[@class=“产品浏览产品”]
5.
]]>
{$linktoprod}
{规范化空间($name)}
]]>
]]>
我的配置xml如上所示。在我的xml中哪里使用regexp代码块?我想把regexp应用到
linktoprod并最终在link标记中获得regexp输出作为输出xml。请任何人指导我。
谢谢。我不知道web收获,但是如果它支持非贪婪量词,您可以使用此模式
/([^/]+?)\?
根据你的要求,你必须插入这样的东西
<regexp>
<regexp-pattern>/([^/]+?)\?</regexp-pattern>
<regexp-source>
/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&ref=6df83d8f-f61f-4648-b846-403938ae92fa
</regexp-source>
<regexp-result>
<template>Last URL part is "${_1}"</template>
</regexp-result>
</regexp>
/([^/]+?)\?
/卡西欧光泽模拟手表女式/p/itmdaqmvzyy23hz5?pid=WATDAQMVVVNQEM9CX&;ref=6df83d8f-f61f-4648-b846-403938ae92fa
最后一个URL部分是“${u 1}”
在
部分中,必须插入要搜索的URL或变量。从手册和您的配置xml中猜测可能是这样的
<regexp-source>
<var>scrappedContent</var>
</regexp-source>
废弃内容
或
${linktoprod}
我想你必须尝试一下。试试这个正则表达式:
/([^/]+)\?
您可能需要去掉前导的/
和尾随的?
为了说明正则表达式的工作原理,下面是它在JavaScript中的结果:
var s = "/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&ref=6df83d8f-f61f-4648-b846-403938ae92fa"
console.log(s.match(/\/([^/]+)\?/g)); // /itmdaqmvzyy23hz5?
可以但是我不知道在哪里以及如何在webharvest xml中使用和应用regexp。所以请指导我如何使用它。@user1785585只需将
添加到您的配置xml中即可。对于
,我不是很确定。您应该阅读手册并尝试几种组合。请在问题中显示当前的web harvest xml。
var s = "/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&ref=6df83d8f-f61f-4648-b846-403938ae92fa"
console.log(s.match(/\/([^/]+)\?/g)); // /itmdaqmvzyy23hz5?