เครื่องมือเลือก CSS บรรทัดคำสั่ง


15

คำถาม

เครื่องมือใด (เด่นกว่าสำหรับ Linux) สามารถเลือกเนื้อหาขององค์ประกอบ HTML ตามเส้นทาง CSS

ตัวอย่าง

ตัวอย่างเช่นพิจารณาเอกสาร 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

ใช้เครื่องมือ W3Cสำหรับการแยกวิเคราะห์ HTML / XML และการแยกเนื้อหาโดยใช้ตัวเลือก CSS ตัวอย่างเช่น:

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

จะสร้างผลลัพธ์ที่ต้องการ:

Tabular Content 1
Tabular Content 2

การใช้ความยาวบรรทัด 240 ตัวอักษรทำให้แน่ใจได้ว่าองค์ประกอบที่มีเนื้อหายาวจะไม่ถูกแยกข้ามหลายบรรทัด hxnormalize -xคำสั่งสร้างเอกสาร XML hxselectรูปแบบที่ดีซึ่งสามารถนำมาใช้โดย


2
สำหรับผู้ใช้ brew install html-xml-utilsMacOS,
anishpatel

7

โซลูชั่น CSS

คำสั่ง Element Finder จะทำให้งานนี้สำเร็จ:

ตัวอย่างเช่น:

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

สิ่งนี้แสดงผลในรูปแบบ JSON ซึ่งสามารถแตกออกได้

โซลูชัน XML

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คือมันใช้แพ็คเกจ golang.org/x/net/html สำหรับการแยกวิเคราะห์ HTML5


0

โหนดสามารถทำได้ด้วย JQuery และ DOM ปลอม

ฉันสร้างภาพ Docker สำหรับสิ่งนั้น ( 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

อาร์กิวเมนต์ที่สองคือรหัส JavaScript เพื่อให้คุณสามารถทำสิ่งที่คุณต้องการจริงๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.