Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 8, 2009 03:40:53

офян
От:
Зарегистрирован: 2009-11-06
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, группы и регулярные выражения...

Пробую все таки супом… хтмл обрезал и время построения дерева уменьшилось до 2-3 сек, что приемлемо…

html_start = "<HTML><BODY>"
html_end = "</BODY></HTML>"

html_full = html_start + htmlSource[kkk:iii] + "</table>" + html_end

soup = BeautifulSoup(html_full)

for table in soup:
rows = table.findAll('tr')
for tr in rows:
cols = tr.findAll("td", text=re.compile(">([\w\d]+?)<", re.S|re.I|re.UNICODE))
for td in cols:
print td
print "-----------------------------"
Только условие ">(+?)<" работать не слишком хотит…=(… а вроде должно…



Отредактировано (Ноя. 8, 2009 03:41:13)

Офлайн

#2 Ноя. 8, 2009 15:22:29

pasaranax
От:
Зарегистрирован: 2009-06-13
Сообщения: 574
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг, группы и регулярные выражения...

офян
Только условие ">(+?)<" работать не слишком хотит…sad… а вроде должно…
Это условие включает только буквы и цифры без пробелов, а у тебя там и пробелы и знаки препинания. Пожалуй подойдет вот так: ">(+?)<".

добавлено:
параметр text ищет в супе только содержимое тэгов, поэтому треугольные скобки не нужны, и можно сделать более мягкое условие. Вот мой код:
import time
import re
from BeautifulSoup import BeautifulSoup

start = time.time()

html = open("html").read()
soup = BeautifulSoup(html)

for table in soup.findAll("table"):
rows = table.findAll("tr")
for tr in rows:
cols = tr.findAll("td", {"class": "row"},
text=re.compile("\S+?", re.I | re.U))
for td in cols:
print td
print "-----------------------------"
print "============================"

print "time:", time.time() - start, "sec"
1.7-1.8 сек работает.



Отредактировано (Ноя. 8, 2009 15:37:45)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version