2013-05-20 1 views
0

Я хотел бы прочитать некоторые из информации с этого сайта: http://www.federalreserve.gov/monetarypolicy/beigebook/beigebook201301.htmКак читать текст с веб-сайта в Python

У меня есть следующий код, и он правильно читает по источникам HTML

def Connect2Web(): 
    aResp = urllib2.urlopen("http://www.federalreserve.gov/monetarypolicy/" + 
    "beigebook/beigebook201301.htm") 

    web_pg = aResp.read() 

    print web_pg 

Однако я теряюсь на том, как анализировать эту информацию, потому что для большинства парсеров HTML требуется файл или исходный веб-сайт, тогда как у меня уже есть информация, которая мне нужна в String.

+2

«Для большинства парсеров HTML требуется файл или оригинальный веб-сайт« False. Большинство из них работают просто по HTML. –

+0

Посмотрите на [Красивый суп] (http://www.crummy.com/software/BeautifulSoup/). –

ответ

2

Мы начали с BS некоторое время назад, но в конце концов переехал в LXML

from lxml import html 
my_tree = html.fromstring(web_pg) 
elements = [item for item in my_tree.iter()] 

Итак, теперь вы должны решить, какие элементы вы хотите, и вы должны убедиться, что элементы, которые вы держите не дети других элементов, которые вы решаете вы хотите сохранить, например

<div> some stuff 
<table> 
<tr> 
<td> banana </td> 
</tr> 
<table> 
some more stuff 
</div> 

HTML-таблицу выше является дочерним DIV, так что все в таблице содержится в DIV, так что вы должны использовать определенную логику, чтобы сохранить ОНЛ у тех элементов, чьи родители уже не держали

1
from bs4 import BeautifulSoup 
soup = BeautifulSoup(web_pg) 
1

Если вы как JQuery использовать pyQuery

старт с

from pyquery import PyQuery as pq 

d = pq(web_pg) 

или даже

from pyquery import PyQuery as pq 

d = pq(url="http://www.federalreserve.gov/monetarypolicy/beigebook/beigebook201301.htm") 

Теперь d является как $ в JQuery:

p = d("#hello") # get element with id="hello" 
print p.html() # print as html 

p = d('#content p:first') # get first <p> from element with id="content" 
print p.text() # print as text 
+0

..strong upvote - pyquery - это самое простое решение для безболезненного html munging .., если прямой 'pq (url = ...)' fail (f.e.lxml, жалующийся на неподдерживаемые «** строки Unicode с объявлением кодировки **»), сначала выберем файл через 'urllib.urlopen (url) .read()', а затем подайте его на pyquery. – eMPee584

1

Вы также можете использовать RE - Регулярное выражение для синтаксического анализа этой информации (на самом деле он может анализировать весь текст), это быстрее, чем BeautifulSoup и другие, но в то же время регулярное выражение труднее узнать, чем другие

Вот DOCUMENT

пример:

import re 
p = re.compile(r'<p>(.*?)</p>') 
content = r'<p> something </p>' 
data = re.findall(p, content) 
print data 

это печать:

[' something '] 

Этот пример может извлечь содержимое, которое между <p> и </p>

Это просто очень простой пример регулярного выражения.

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

Итак, просто изучите его!

+0

Спасибо, RegEx, безусловно, то, что я планирую на обучении в какой-то момент – weskpga