背景
許多問題詢問如何獲得給定CSS選擇器的特定DOM element。這個問題是關於相反的方向。文檔進行解析jsoup,但可以很容易地轉換爲任何的:基於元素實例的派生CSS選擇器
使用案例
對於一個特定的問題域(例如,化學化合物),成千上萬的網頁以類似的方式列出了化學品,但各網站的標記不盡相同。例如:
<div id="chemical-list">
<div class="compound">
<span class="compound-name">water</span>
<span class="compound-periodic">H2O</span>
</div>
<div class="compound">
<span class="compound-name">sodium hypochlorite</span>
<span class="compound-periodic">NaClO</span>
</div>
</div>
另一個網站可能列出它們是不同的:
<ul class="chemical-compound">
<li class="chem-name">water, H2O</li>
<li class="chem-name">sodium hypochlorite, NaClO</li>
</ul>
另一個網站可能會再次使用不同的標記:
<table border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr><td>water</td><td>H2O</td></tr>
<tr><td>sodium hypochlorite</td><td>NaClO</td></tr>
</tbody>
</table>
幾個示例頁面從每個數以千計的網站被下載。然後,使用現有的化學品列表,檢索候選網頁元素列表相對簡單。使用jsoup,這很簡單:
Elements elements = chemicals.getElementsMatchingOwnText(chemicalNames);
這將允許跨越數千頁的高精度分析。 (該頁面可以討論次氯酸鈉和次氯酸鈉的應用,但是隻有該清單正在分析中。)瞭解CSS將極大地簡化分析並提高其準確性。
另一種方法是處理整個頁面,查找化學物質的「組」,然後嘗試提取列表。這兩個問題都很難,但使用CSS選擇器跳轉到頁面中的確切位置要高效得多,而且可能要準確得多。這兩個問題都需要一些手工操作,但我想盡可能自動化。
問題
上述API不出現有生成給予Element instance(越獨特越好)CSS選擇器的方法。可以迭代父元素並手動生成選擇器。這已經是demonstrated使用JavaScript在幾個。還有生成XPath的答案,並且可能使用Selenium。
具體來說,你會怎麼做:
String selector = element.getCSSPath();
Elements elements = document.select(selector);
這會:
- 返回CSS選擇給定元素。
- 搜索給定CSS選擇器的文檔。
- 返回與選擇器匹配的元素列表。
第二行不是問題;第一行是有問題的。
問題
什麼API可以從DOM元素生成CSS選擇器(儘可能唯一)?
如果沒有現有的API,那麼很高興知道。
Jsoup不提供這一點,但如果它這樣做了,最獨特的選擇將是使用'>'和'選擇:EQ()'模仿XPath表達式。目前還不清楚它的用途是什麼 - 它將精確地選擇該元素,而不再是其他內容,所以您的示例代碼將毫無用處。這種API的實際用例是什麼? – 2014-09-21 20:08:19
[獲取元素的CSS選擇器(當它沒有id時)](https://stackoverflow.com/questions/4588119/get-elements-css-selector-when-it-doesnt-have-an -id) – 10basetom 2017-05-31 12:44:55