Komut satırı CSS seçici aracı


15

Soru

Hangi araç (tercihen Linux için) bir HTML öğesinin içeriğini CSS yoluna göre seçebilir?

Misal

Örneğin, aşağıdaki HTML belgesini düşünün:

<html>
<body>
  <div class="header">
  <h1>Header</h1>
  </div>
  <div class="content">
    <table>
      <tbody>
      <tr><td class="data">Tabular Content 1</td></tr>
      <tr><td class="data">Tabular Content 2</td></tr>
      </tbody>
    </table>
  </div>
  <div class="footer">
  <p>Footer</p>
  </div>
</body>
</html>

Hangi komut satırı programı (örn. Bir tür "cssgrep") bir CSS seçici kullanarak değerleri ayıklayabilir? Yani:

cssgrep page.html "body > div.content > table > tbody > tr > td.data"

Program standart çıktıya aşağıdakileri yazacaktır:

Tabular Content 1
Tabular Content 2

İlgili Bağlantılar

Teşekkür ederim!

Yanıtlar:


12

HTML / XML ayrıştırma ve CSS seçicileri kullanarak içeriğin çıkarılması için W3C araçlarını kullanın . Örneğin:

hxnormalize -l 240 -x filename.html | hxselect -s '\n' -c "td.data"

İstenilen çıktıyı üretecektir:

Tabular Content 1
Tabular Content 2

240 karakter uzunluğunda bir satır kullanmak, uzun içerikli öğelerin birden fazla satıra bölünmemesini sağlar. hxnormalize -xKomut tarafından kullanılabilecek bir iyi biçimli XML belge oluşturur hxselect.


2
MacOS kullanıcıları için brew install html-xml-utils,.
anishpatel

7

CSS Çözümü

Öğe Bulucu komutu bu görevi kısmen yerine getirir:

Örneğin:

elfinder -j -s td.data -x "html"

Bu, sonucu ayıklanabilen JSON biçiminde oluşturur.

XML Çözümü

XML :: Twig modülü (" sudo apt-get install xml-twig-tools") adlı bir araç ile birlikte geliyor xml_grepelbette, HTML iyi biçimli şartıyla, bu sadece yapabilir.

Üzgünüm, şu anda bunu test edemiyorum, ancak böyle bir şey işe yarayacak:

xml_grep -t '*/div[@class="content"]/table/tbody/tr/td[@class="data"]' file.html

2

https://github.com/ericchiang/pup , örneğinizle yakından uyumlu CSS tabanlı bir sorgu diline sahiptir. Aslında, girdinizle aşağıdaki komut:

pup "body > div.content > table > tbody > tr > td.data text{}"

üretir:

Tabular Content 1
Tabular Content 2

Sondaki text{}HTML etiketlerini kaldırır.

Güzel bir özellik, tam yolun verilmesine gerek olmamasıdır, böylece örneğinizle tekrar:

$ pup 'td.data text{}' < input.html
Tabular Content 1
Tabular Content 2

Bunun bir avantajı, pupHTML5'i ayrıştırmak için golang.org/x/net/html paketini kullanmasıdır.


0

Düğüm JQuery ve sahte bir DOM ile bunu yapabilir.

Bunun için bir Docker görüntüsü yaptım ( https://hub.docker.com/r/phil294/jquery-jsdom/ ):

docker run --rm -i phil294/jquery-jsdom '$("body > div.content > table > tbody > tr > td.data").text()' < page.html

İkinci argüman JavaScript kodudur, bu yüzden istediğiniz her şeyi gerçekten yapabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.