2013-01-07 1 views
0

일부 전자 상거래 사이트를 스크랩하기 위해 웹 수확을 사용하고 있습니다. 검색 페이지를 반복하고 각 제품 세부 정보를 출력 xml로 가져옵니다.하지만 지금 앵커에서 정규 표현식을 사용하고 싶습니다. (a)에 태그를 긁어 특히 string.ie를 얻을 수 있지만,웹 수확 xml에서 regex 사용

let $linktoprod :=data($item//a[@class="fk-anchor-link"]/@href) 

위의 라인은

/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&ref=6df83d8f-f61f-4648-b846-403938ae92fa 

자, 반환 값이 첫 번째 제품을 위해, 각 제품, 즉의 앵커 태그 HREF 값을 반환 I/([^/\?] +) \?와 같은 정규식을 사용하고 싶습니다. 마지막 /와 사이의 문자열을 가져오고? 즉,

itmdaqmvzyy23hz5 

출력 xml. 이 문제와 관련하여 도움이되는 분은 제게 도움을주십시오. 감사합니다.

업데이트 - 쇼 above.Where 내 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> 

내 구성 XML은 무엇입니까? 그리고 나는 regexp가 linktoprod에 적용되고 마지막으로 출력 xml로 링크 태그에 regexp 출력을 얻고 싶습니다. 누군가 나를 안내합니다. 감사합니다.

+0

귀하의 질문에 현재 웹 수확 XML을 제시해주십시오. –

답변

1

나는 웹 수확 모르는,하지만이 아닌 욕심 정량을 지원하는 경우, 당신은

/([^/]+?)\? 

Web Harvest User manual - regexp에 따르면이

<regexp> 
    <regexp-pattern>/([^/]+?)\?</regexp-pattern> 
    <regexp-source> 
     /casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&amp;ref=6df83d8f-f61f-4648-b846-403938ae92fa 
    </regexp-source> 
    <regexp-result> 
     <template>Last URL part is "${_1}"</template> 
    </regexp-result> 
</regexp> 

같은 것을 삽입해야이 패턴을 사용할 수 있습니다 <regexp-source> 부분에서는 검색 할 URL 또는 변수를 삽입해야합니다. 설명서에서 추측하고 구성 XML 그것이 수 있습니다 뭔가

같은
<regexp-source> 
    <var>scrappedContent</var> 
</regexp-source> 

또는

<regexp-source> 
    ${linktoprod} 
</regexp-source> 

난 당신이 조금 실험을 생각합니다.

+0

괜찮습니다. 하지만 난 어디서 어떻게 사용하고 webharvest xml.So에 regexp를 적용하는 날 몰래 안내를하시기 바랍니다. – Ashwini

+0

@ user1785585 업데이트 된 답변을 참조하십시오. –

+0

@ user1785585 config xml에 ''을 추가하기 만하면됩니다. ''에 대해서는 잘 모르겠습니다. 설명서를보고 여러 가지 조합을 시도해야합니다. –

0

이 정규식보십시오 : 당신은 제거해야 할 수도 있습니다

/([^/]+)\? 

를 선도 /? 후행.

는 정규식 작동하는지 설명하기 위해이는 자바 스크립트로 결과입니다입니다 :

var s = "/casio-sheen-analog-watch-women/p/itmdaqmvzyy23hz5?pid=WATDAQMVVNQEM9CX&amp;ref=6df83d8f-f61f-4648-b846-403938ae92fa" 
console.log(s.match(/\/([^/]+)\?/g)); // /itmdaqmvzyy23hz5?