我想阅读本网站的一些信息: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中获得了所需的信息。
答案 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>
这只是正则表达式的一个非常简单的例子。
使用正则表达式非常重要,因为它可以做更多的事情。
所以,只要学习它!