0

我想从这个网站上阅读一些信息: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 解析器都需要一个文件或原始网站,而我已经在字符串中拥有了我需要的信息。

4

4 回答 4

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 中,因此您必须使用一些逻辑来仅保留那些尚未保留其父元素的元素

于 2013-05-20T02:43:25.273 回答
1
from bs4 import BeautifulSoup
soup = BeautifulSoup(web_pg)
于 2013-05-20T02:32:44.907 回答
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
于 2013-05-20T03:12:44.773 回答
1

也可以使用RE--Regular expression来解析这些信息(其实它可以解析所有文本),比BeautifulSoup等更快,但同时正则表达式比其他更难学

这是文件

例子:

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

它打印:

[' something ']

此示例可以提取介于<p>和之间的内容</p>

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

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

所以,只要学习它!

于 2013-05-20T09:28:42.580 回答