Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 30, 2009 19:20:47

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

Python3 Как получить данные из html

Всем привет,

Как по тегу “tag_name”:

<tag_name> some data </tag_name>
Получить “some data”???

Для примера, возьмем страницу: http://tycho.usno.navy.mil/cgi-bin/timer.pl

Саму страницу получил следующим образом:
import httplib2

h = httplib2.Http(".cache")

response, content = h.request('http://tycho.usno.navy.mil/cgi-bin/timer.pl')

html_file = content.decode("utf-8")
print(html_file)
пример страницы:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final"//EN>
<html>
<body>
<TITLE>What time is it?</TITLE>
<H2> US Naval Observatory Master Clock Time</H2> <H3><PRE>
<BR>Aug. 30, 15:48:31 UTC Universal Time
<BR>Aug. 30, 11:48:31 AM EDT Eastern Time
<BR>Aug. 30, 10:48:31 AM CDT Central Time
<BR>Aug. 30, 09:48:31 AM MDT Mountain Time
<BR>Aug. 30, 08:48:31 AM PDT Pacific Time
<BR>Aug. 30, 07:48:31 AM AKDT Alaska Time
<BR>Aug. 30, 05:48:31 AM HAST Hawaii-Aleutian Time
</PRE></H3><P><A HREF="http://www.usno.navy.mil"> US Naval Observatory</A>

</body></html>
Если не сложно, приведите плиииз пример для “<TITLE>”



Офлайн

#2 Авг. 30, 2009 20:08:48

sypper-pit
От: Ulan-Ude(msk)
Зарегистрирован: 2009-01-30
Сообщения: 1102
Репутация: +  6  -
Профиль   Отправить e-mail  

Python3 Как получить данные из html

а что регулярные выражения отменили смотри_тут

Офлайн

#3 Авг. 31, 2009 04:20:52

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

Python3 Как получить данные из html

не понимаю как с помощью регулярных выражений найти то, что мне нужно
я понимаю, как найти шаблон какой то, но при поиске, например:

result = re.search('TITLE', html_file);
print(result.group(0))

я получаю ‘TITLE’

вы не могли бы пример показать? Эта же ветка форума для новичков:)



Офлайн

#4 Авг. 31, 2009 08:09:54

Striver
От:
Зарегистрирован: 2006-10-26
Сообщения: 247
Репутация: +  22  -
Профиль   Отправить e-mail  

Python3 Как получить данные из html

result = re.search(r'(<TITLE>)(?P<nazvanie>.*?)(</TITLE>)', html_file);
print(result.group('nazvanie'))
как-то так… Смысл в том, что нужно найти не только слово ‘TITLE’, а всю подстроку, содержащуюю нужные данные, а потом из неё выцеплять нужное с помощью групп.



Офлайн

#5 Авг. 31, 2009 09:29:49

neo08
От:
Зарегистрирован: 2008-08-01
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Python3 Как получить данные из html

savswsoft
Если не сложно, приведите плиииз пример для “<TITLE>”
Існує такий html парсер як Beautiful Soup.
Але для того щоб він запрацював рядок <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2 Final”//EN> з твого прикладу треба видалити (чому? не знаю…)
І тоді приклад для title буде виглядати так
import BeautifulSoup
doc = """<html>
<body>
<TITLE>What time is it?</TITLE>
<H2> US Naval Observatory Master Clock Time</H2> <H3><PRE>
<BR>Aug. 30, 15:48:31 UTC Universal Time
<BR>Aug. 30, 11:48:31 AM EDT Eastern Time
<BR>Aug. 30, 10:48:31 AM CDT Central Time
<BR>Aug. 30, 09:48:31 AM MDT Mountain Time
<BR>Aug. 30, 08:48:31 AM PDT Pacific Time
<BR>Aug. 30, 07:48:31 AM AKDT Alaska Time
<BR>Aug. 30, 05:48:31 AM HAST Hawaii-Aleutian Time
</PRE></H3><P><A HREF="http://www.usno.navy.mil"> US Naval Observatory</A>

</body></html>"""
soup = BeautifulSoup.BeautifulSoup(doc)
print soup.find('title')
<title>What time is it?</title>
Якщо хочеться виділити текст що між тегами
можна написати так
print soup.find('title').string
PS Наперід вибачаюсь якщо BeautifulSoup не працює в третьому пітоні, я тестував приклад на 2.6
Хоча на сайті BeautifulSoup писало що він сумісний з пітоном 3…
PSPS Для того щоб запустити мій приклад треба писати
print(soup.find('title').string)



Отредактировано (Авг. 31, 2009 09:37:13)

Офлайн

#6 Авг. 31, 2009 09:58:42

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

Python3 Как получить данные из html

прикольно так читать украинский коммент, из него ничего не понял, но за код спасиб:))



Офлайн

#7 Авг. 31, 2009 16:01:40

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

Python3 Как получить данные из html

savswsoft
рекомендую пощупать lxml (самый быстрый, биндинги к сишной библе) и вышеназванный BeautifulSoup. Да и в самом питоне кое-что есть - sax, например.



Офлайн

#8 Сен. 2, 2009 16:35:27

diam123
От:
Зарегистрирован: 2008-10-23
Сообщения: 105
Репутация: +  0  -
Профиль   Отправить e-mail  

Python3 Как получить данные из html

Если делать это на регулярках, то можно так:

import re
import urllib

def get_tag_data(tag, page):
tags_data = re.findall(r"\<{tag}\>(.*?)\<\/{tag}\>".format(tag=tag), page)
return tags_data

#Использовать так:
page = urllib.urlopen("http://www.google.com").read()
print (get_tag_data("TITLE", page))



Отредактировано (Сен. 2, 2009 16:39:51)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version