2009-12-12 2 views
0

Я пытаюсь отфильтровать определенные данные из файла HTML. Например, файл HTML выглядит следующим образом:Как фильтровать данные из файла с помощью Python?

<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr> 

Мне нужно извлечь software_0.1-0 части, а также 17-ноября-2009 части. Как я могу это сделать?

Большое спасибо.

+1

В этом примере на самом деле не совсем ясно, каковы критерии фильтрации - похоже, это может быть «текст между« «тегами», но это не совсем подходит (есть «186K», которые вы надеваете похоже, не хочет. Не могли бы вы подробнее рассказать? –

ответ

6

Это довольно просто с BeautifulSoup:

html = '''<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr>''' 

import BeautifulSoup 
soup = BeautifulSoup.BeautifulSoup(html) 
print soup.td.next.next 
print soup.td.nextSibling.next 

Выход:

software_0.1-0.log 
17-Nov-2009 13:46 
2

Вы можете извлечь интересующие строки (и некоторые другие тексты), используя, например, популярный пакет beautifulsoup. Затем вам понадобится некоторые манипуляции с строкой (или, может быть, регулярные выражения), чтобы отделить точную часть интереса, но это зависит от того, какие именно правила вы хотите применить, т. Е. Всегда это суффикс .log, который вы хотите удалить из имени файла, всегда ли это пространство, которое отделяет дату от времени и т. д. Если вы точно определите правила, их будет сложно реализовать (без точной спецификации, однако, все это будет большой путаницей догадок ;-).

0

Попробуйте Beautifull Soup, синтаксический анализатор для HTML. Вы получите структурированный документ и сможете выбрать первое и второе содержимое td.

В этом случае это может быть излишним, но особенно, если ваш HTML-код снаружи и может изменить человека обслуживания, вы поблагодарите за выбор читаемого решения.

0

вам требование кажется простым, так вот не способ BeautifulSoup, просто чистая строка манипуляции

s="""<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]">software_0.1-0.log</td><td align="right">17-Nov-2009 13:46 </td><td align="right">186K</td></tr>""" 

string=s.split(">") 
for i in string: 
    try: 
     e=i.index("<") 
    except: pass 
    else: 
     print i[:e] 

сейчас вы можете использовать i [: e], чтобы найти «программное обеспечение» и часть даты

+0

Хотя это технически верно, все же лучше использовать Beautiful Soup, потому что в будущем вы будете платить дивиденды, когда вам придется выполнять более сложные манипуляции с HTML. –

+0

до того времени, когда все сложнее, нет необходимости использовать BeautifulSoup только для этого случая – ghostdog74

Смежные вопросы