XPath 관련 문제를 해결하고 싶습니다.일반화 XPaths
사용자가 제공 한 여러 개의 Xpath를 일반화하여 모든 제공된 예제에 가장 잘 맞는 XPath를 얻으려고합니다. 이것은 내가 건축하고있는 웹 스크 레이 핑 시스템을위한 것입니다.
예 : 사용자가
좋은 예 (각 Google 뉴스 페이지에서 '스포트라이트'섹션에있는 링크를 가리키는) 다음 XPath의를 제공하는 경우 :
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3] /div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[1]/div[2]/a[@id='MAE4AUgAUABgAmoCdXM']/span
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[6]/div[2]/a[@id='MAE4AUgFUABgAmoCdXM']/span
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div[12]/div[2]/a[@id='MAE4AUgLUABgAmoCdXM']/span
나쁜 예 : (다른 섹션의 링크를 가리키며)
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='lt-col']/div[2]/div[@id='replaceable-section-blended']/div[1]/div[4]/div/h2/a[@id='MAA4AEgFUABgAWoCdXM']/span
은 일반화하여 '스포트라이트'섹션의 모든 링크를 선택하는 xpath 표현식을 생성 할 수 있어야합니다. 당신이 친절하게 대해 이동하는 방법을 나에게 조언을 할 수
일반화 된 XPath를
/html/body/div[@id='page']/div/div[@id='main-wrapper']/div[@id='main']/div/div/div[3]/div[1]/table[@id='main-am2-pane']/tbody/tr/td[@id='rt-col']/div[3]/div[@id='s_en_us:ir']/div[2]/div/div[2]/a[@id='MAE4AUgLUABgAmoCdXM']/span
(주어진 잘못된 XPath를 던질 수 있어야한다). 가장 긴 공통 부분 문자열 전략을 사용하려고 생각했지만 나쁜 예가 주어지면 지나치게 일반화 될 것입니다 (네 번째 예와 같이).이 영역에서 수행 된 라이브러리 나 오픈 소스 소프트웨어가 있습니까?
비슷한 게시물 (finding common ancestor from a group of xpath? 및 Howto find the first common XPath ancestor in Javascript?)이 가장 긴 공통 조상에 관한 이야기입니다.
나는 firefox 확장 형식으로 자바 스크립트로 작성했습니다.
시간을내어 주시면 감사하겠습니다.
문제가 무엇인지 명확하지 않습니다. "나쁜"XPath 표현식과 "좋은"Xpath 표현식이 무엇인지 정의하지 않았습니다. 또한 "나쁜"표현식이 입력되면 수행 할 작업을 정의하지 않았습니다. 질문을 편집하고 신중하게 가능한 한 정확하게 정의하십시오. –
안녕하세요 Dimitre, 위의 예를 사용하여 사용자가 Google 뉴스의 주목받는 부분에서 모든 링크를 추출하려고한다고 가정하면 '스포트라이트'링크를 가리키는 xpath의 몇 가지 예를들 수 있습니다.그가 실수로 1 개의 '나쁜'예를 주었다고 가정 해 봅시다 - 다른 콘텐츠에 대한 임의의 xpath, 시스템이 함정에 빠져서 '나쁜'xpath를 포괄하도록 일반화하려고해서는 안됩니다. – netvarun
@ user649851 : 주어진 노드 집합에서 더 많은 자손을 가진 가장 내적인 가장 가까운 조상이 필요합니다. 노드 집합의 노드가 동일한 문서에서 왔을 때, 그들은 적어도 하나의 공통 조상을 갖는다 : 최악의 경우 루트 요소. 그래서, 만약 당신이 가장 내면을 원한다면, 당신은 그 공통적 인 조상과 탈구를 비교해야한다는 것을 의미합니다. 또한, 당신은 당신이 고려하지 않을 노드 집합에서 노드를 선택 해야하는 거의 일반적인 싶어요. 이 두 프로세스는이 작업을 단일 XPath 식에 대해 불가능하게 만듭니다. –