如何从Python网站上阅读文本

时间:2013-05-20 02:29:36

标签: python html

我想阅读本网站的一些信息:http://www.federalreserve.gov/monetarypolicy/beigebook/beigebook201301.htm

我有以下代码,它正确读取HTML源

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

    web_pg = aResp.read()

    print web_pg
但是,由于大多数HTML解析器需要一个文件或原始网站,因此我对如何解析这些信息感到迷茫,而我已经在String中获得了所需的信息。

4 个答案:

答案 0 :(得分: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 :(得分:1)

from bs4 import BeautifulSoup
soup = BeautifulSoup(web_pg)

答案 2 :(得分: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

答案 3 :(得分: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>

之间的内容

这只是正则表达式的一个非常简单的例子。

使用正则表达式非常重要,因为它可以做更多的事情。

所以,只要学习它!