Scrapy로 테이블을 긁어 내려고하는데 테이블 구조로 인해 너무 많은 자식 노드가 발생하는 문제를 발견했습니다.
예를 들어, 다음과 같이 테이블의 뒷부분에있는 td에 테이블이 있습니다.
<table>
<tr>
<td>
Text I want
</td>
<td>
<table>
<tr>
<td>
Text I do not want
</td>
</tr>
</td>
</table>
그래서 내가 잡으라고 말할 때 :
td[1]/text()
각 tr의 첫 번째 td에있는 텍스트를 가져옵니다. 정확히 제가 원하는 것입니다. 그러나 일부 td에는 자체 테이블이 있습니다! 왜 그들이 이런 식으로 이것을 만들 었는지, 왜 문자 그대로 테이블 수준 자체보다 더 깊은 곳에서 찾을 수있는 클래스 나 ID가 없는지 묻지 마십시오. 그러나 그것이 방법입니다. 그래서 나는 또한 테이블 내부의 첫 번째 td에 텍스트를 반환하고 있습니다 ... 그것은 내가 원하지 않는 (아직) 나중에 td에 있습니다.
ID 나 클래스가 없는데 표에서 더 깊은 내용이 아닌 첫 번째 td의 텍스트 만 원하는 것에 대해 어떻게 더 구체적으로 알 수 있습니까?
계속 진행할 수있는 몇 가지 옵션이 있습니다.
최상위 레벨에 대한 상대 xpath를 사용하십시오 td
( //
재귀 검색을 유발하는 절대 값 없음 ).
/path_to_table/table/tr/td[1]/text()
조상 중 td
하나만 있는지 확인하십시오 table
.
//td[count(ancestor::table) = 1]/text()
도움이 되었기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다