Форум сайта python.su
Есть html-код вида
<tr>
<td class="row"><p><a href="?keyword=123">123</a></p></td>
<td class="row"><p>52</p></td>
<td class="row"><a href="http://www.google.com/search?123" target="_blank">35</a></td>
<td class="row"><a href="http://search.yahoo.com/search?fr=ytff-&p=123" target="_blank">19</a></td>
<td class="row"><a href="http://search.msn.com/results.aspx?q=123&FORM=MSNH&srch_type=0" target="_blank">8</a></td>
<tr>
<tr>
<td class="row"><p><a href="?keyword=456">456</a></p></td>
<td class="row"><p>52</p></td>
<td class="row"><a href="http://www.google.com/search?456" target="_blank">35</a></td>
<td class="row"><a href="http://search.yahoo.com/search?fr=ytff-&p=456" target="_blank">19</a></td>
<td class="row"><a href="http://search.msn.com/results.aspx?q=456&FORM=MSNH&srch_type=0" target="_blank">8</a></td>
<tr>
...
'<a href=\"\?keyword\=.*?>(.*?)</a>'
'</a></p></td>.*?<td class=\".*?row\"><p>(\d*?)</p></td>'
'<td class=\".*?row\"><a href=\"http\:\/\/www\.google\.com/search\?q\=.*?>(.*?)</a></td>'
'<td class=\".*?row\"><a href=\"http\:\/\/search\.yahoo\.com/search\?fr\=ytff-.*?>(.*?)</a></td>'
'<td class=\".*?row\"><a href=\"http\:\/\/search\.msn\.com/results\.aspx\?q\=.*?>(.*?)</a></td>'
123
456
...
52
52
...
Офлайн
А не хочешь воспользоваться модулями, реализующими удобный парсинг хтмл?
Офлайн
BeautifulSoup???
Я просто не совсем понимаю как он работает… там можно группой выводить?… или полностью таблицу спарсить?
Отредактировано (Ноя. 7, 2009 21:11:15)
Офлайн
офянМожно объединить средствами Python, точнее zip.
Но хотелось бы объеденить все в группы и выводить все вместе…
('123', ‘52’, ‘35’, ‘19’, ‘8’)
('456', ‘52’, ‘35’, ‘19’, ‘8’)
Офлайн
Документация у него так себе. Лучше бы нормально все классы описали. Можно сделать так:
soup = BeautifulSoup(html)
print soup.findAll("td", {"class": "row"}, text=re.compile("\d"))
Офлайн
нет… это полноценная таблица, в которой могут быть и цифры и буквы… причем со структурой, как указано выше…
Офлайн
Тогда меняешь \d на то, что тебе угодно по правилам регулярных выражений. Правда в моем примере все в один список пихается, не совсем, как ты написал.
Офлайн
все вроде бы с супом ничего, если б не запутанная html… на ее разбор секунд 5-10 уходит (((( и 100% процессорного времени… обычными регулярными выражениями практически моментально…
есть еще идеи?
Отредактировано (Ноя. 8, 2009 02:33:10)
Офлайн
Как-то так:
content = []
for tr in re.findall("<tr>(.+?)</tr>", html, re.S):
content.append([])
for text in re.findall(">([\w\d]+?)<", tr):
content[-1].append(text)
print content
Отредактировано (Ноя. 8, 2009 03:19:18)
Офлайн
Офлайн