Я ищу способ получить определенную информацию из HTML в среде оболочки Linux.
Это то, что меня интересует:
<table class="details" border="0" cellpadding="5" cellspacing="2" width="95%">
<tr valign="top">
<th>Tests</th>
<th>Failures</th>
<th>Success Rate</th>
<th>Average Time</th>
<th>Min Time</th>
<th>Max Time</th>
</tr>
<tr valign="top" class="Failure">
<td>103</td>
<td>24</td>
<td>76.70%</td>
<td>71 ms</td>
<td>0 ms</td>
<td>829 ms</td>
</tr>
</table>
И я хочу сохранить в переменных оболочки или повторить их в парах ключ-значение, извлеченных из приведенного выше html. Пример:
Tests : 103
Failures : 24
Success Rate : 76.70 %
and so on..
Что я могу сделать на данный момент, так это создать java-программу, которая будет использовать парсер sax или парсер html, такой как jsoup, для извлечения этой информации.
Но использование java здесь кажется накладным с включением исполняемой банки внутри сценария «обертки», который вы хотите выполнить.
Я уверен, что должны существовать языки-оболочки, которые могут делать то же самое, т. е. perl, python, bash и т. д.
Моя проблема в том, что у меня нет опыта работы с ними, может ли кто-нибудь помочь мне решить эту «довольно простую» проблему
Быстрое обновление:
Я забыл упомянуть, что у меня есть больше таблиц и больше строк в документе.html, извините за то (раннее утро ).
Обновление #2:
Пытался установить Bsoup таким образом, так как у меня нет root-доступа:
$ wget http://www.crummy.com/software/BeautifulSoup/bs4/download/4.0/beautifulsoup4-4.1.0.tar.gz
$ tar -zxvf beautifulsoup4-4.1.0.tar.gz
$ cp -r beautifulsoup4-4.1.0/bs4.
$ vi htmlParse.py # (paste code from ) Tichodromas' answer, just in case this (http://pastebin.com/4Je11Y9q) is what I pasted
$ run file (python htmlParse.py)
ошибка:
$ python htmlParse.py
Traceback (most recent call last):
File "htmlParse.py", line 1, in ?
from bs4 import BeautifulSoup
File "/home/gdd/setup/py/bs4/__init__.py", line 29
from.builder import builder_registry
^
SyntaxError: invalid syntax
Обновление #3:
Запустив ответ Тиходромаса, вы получите эту ошибку:
Traceback (most recent call last):
File "test.py", line 27, in ?
headings = [th.get_text() for th in table.find("tr").find_all("th")]
TypeError: 'NoneType' object is not callable
Любые идеи?