Mục tiêu: Trích xuất văn bản từ một phần tử cụ thể (ví dụ: li), trong khi bỏ qua các thẻ hỗn hợp khác nhau, tức là làm phẳng con đầu tiên và chỉ cần trả lại văn bản được ghép nối của từng con riêng biệt.HTML XPath: Trích xuất văn bản được trộn lẫn với nhiều thẻ?
Ví dụ:
<div id="mw-content-text"><h2><span class="mw-headline" >CIA</span></h2>
<ol>
<li>Central <a href="/Intelligence_Agency.html">Intelligence Agency</a>.</li>
<li>Culinary <a href="/Institute.html">Institute</a> of <a href="/America.html">America</a>.</li>
</ol>
</Div>
văn bản mong muốn:
- Cơ quan Tình báo Trung ương
- Culinary Institute of America
Trừ rằng các thẻ neo xung quanh ngăn cản một hồi đơn giản.
Để trở về mỗi thẻ li riêng biệt, chúng tôi sử dụng đơn giản:
//div[contains(@id,"mw-content-text")]/ol/li
nhưng điều đó cũng bao gồm xung quanh thẻ neo, vv Và
//div[contains(@id,"mw-content-text")]/ol/li/text()
lợi nhuận chỉ có yếu tố văn bản đó là trẻ em trực tiếp của li, tức là 'Trung tâm', '.'...
Có vẻ hợp lý khi đó tìm kiếm các phần tử văn bản của tự và con cháu
//div[contains(@id,"mw-content-text")]/ol/li[descendant-or-self::text]
nhưng điều đó không trả về gì cả!
Mọi đề xuất? Tôi đang sử dụng Python, vì vậy tôi mở để sử dụng các mô-đun khác để xử lý hậu kỳ.
(Tôi đang sử dụng Scrapy HtmlXPathSelector mà dường như XPath 1.0 compliant)
Có thể hữu ích: http://stackoverflow.com/questions/4378502/xpath-return-all-non-blank-text-nodes-not-descendant-of-a-style-or-script/6303276 – warvariuc