कमांड लाइन सीएसएस चयनकर्ता उपकरण


15

सवाल

क्या उपकरण (लिनक्स के लिए अधिमानतः) अपने सीएसएस पथ के आधार पर HTML तत्व की सामग्री का चयन कर सकता है?

उदाहरण

उदाहरण के लिए, निम्नलिखित HTML दस्तावेज़ पर विचार करें:

<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>

कमांड-लाइन प्रोग्राम क्या है (उदाहरण के लिए, "cssgrep" का एक प्रकार) CSS चयनकर्ता का उपयोग करके मान निकाल सकता है? अर्थात्:

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

कार्यक्रम निम्नलिखित मानक उत्पादन के लिए लिखेंगे:

Tabular Content 1
Tabular Content 2

सम्बंधित लिंक्स

धन्यवाद!

जवाबों:


12

HTML / XML पार्सिंग और सीएसएस चयनकर्ताओं का उपयोग करके सामग्री की निकासी के लिए W3C टूल का उपयोग करें । उदाहरण के लिए:

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

वांछित उत्पादन होगा:

Tabular Content 1
Tabular Content 2

240 वर्णों की एक पंक्ति लंबाई का उपयोग करना सुनिश्चित करता है कि लंबी सामग्री वाले तत्वों को कई लाइनों में विभाजित नहीं किया जाएगा। hxnormalize -xआदेश एक अच्छी तरह से गठित XML दस्तावेज़, जिसके द्वारा इस्तेमाल किया जा सकता बनाता है hxselect


2
MacOS उपयोगकर्ताओं के लिए, brew install html-xml-utils
अनीपतेल

7

सीएसएस समाधान

तत्व खोजक आदेश आंशिक रूप से इस कार्य को पूरा करेगा:

उदाहरण के लिए:

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

यह JSON प्रारूप में परिणाम प्रस्तुत करता है, जिसे निकाला जा सकता है।

XML समाधान

एक्सएमएल :: टहनी मॉड्यूल ( " sudo apt-get install xml-twig-tools") नाम के एक उपकरण के साथ आता है xml_grepकि, बशर्ते कि, ज़ाहिर है कि आपके HTML अच्छी तरह से बनाई है बस ऐसा करने में सक्षम है।

मुझे खेद है कि मैं इस समय इसका परीक्षण नहीं कर पा रहा हूं, लेकिन कुछ इस तरह काम करना चाहिए:

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

2

https://github.com/ericchiang/pup में CSS- आधारित क्वेरी भाषा है जो आपके उदाहरण के निकट है। वास्तव में, आपके इनपुट के साथ, निम्न कमांड:

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

पैदा करता है:

Tabular Content 1
Tabular Content 2

अनुगामी text{}HTML टैग को हटा देता है।

एक अच्छी विशेषता यह है कि पूर्ण पथ की आवश्यकता नहीं है, ताकि आपके उदाहरण के साथ फिर से:

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

इसका एक फायदा pupयह है कि यह HTML5 पार्स करने के लिए golang.org/x/net/html पैकेज का उपयोग करता है।


0

नोड JQuery और एक नकली डोम के साथ कर सकते हैं।

मैंने इसके लिए एक डॉकटर छवि बनाई ( 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

दूसरा तर्क जावास्क्रिप्ट कोड है, जिससे आप वास्तव में कुछ भी कर सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.