使用Python从解析的HTML中提取文本

时间:2010-08-26 13:12:08

标签: python html regex

我是Python的新手,我一直在尝试使用已经使用BeautifulSoup解析的正则表达式搜索html。我没有取得任何成功,我认为原因是我不完全理解如何正确设置正则表达式。我看过类似问题的老问题,但我还是没想出来。如果有人可以提取“/ torrent / 32726/0 /”和“Slackware Linux 13.0 [x86 DVD ISO]”以及正则表达式如何工作的详细表达,那将非常有用。

<td class="name">
  <a href="/torrent/32726/0/">
   Slackware Linux 13.0 [x86 DVD ISO]
  </a>
 </td>

编辑:我想说的是,我试图使用BeautifulSoups函数提取“/ torrent / 32726/0 /”和“Slackware Linux 13.0 [x86 DVD ISO]”来搜索解析树。在搜索和阅读文档后我一直在尝试各种各样的东西,但我仍然不确定如何去做。

2 个答案:

答案 0 :(得分:3)

BeautifulSoup还可以从你的html中提取节点值。

from BeautifulSoup import BeautifulSoup

html = ('<html><head><title>Page title</title></head>'
       '<body>'
       '<table><tr>'
       '<td class="name"><a href="/torrent/32726/0/">Slackware Linux 13.0 [x86 DVD ISO]</a></td>'
       '<td class="name"><a href="/torrent/32727/0/">Slackware Linux 14.0 [x86 DVD ISO]</a></td>'
       '<td class="name"><a href="/torrent/32728/0/">Slackware Linux 15.0 [x86 DVD ISO]</a></td>'
       '</tr></table>'
       'body'
       '</html>')
soup = BeautifulSoup(html)
links = [td.find('a') for td in soup.findAll('td', { "class" : "name" })]
for link in links:
    print link.string

输出

Slackware Linux 13.0 [x86 DVD ISO]  
Slackware Linux 14.0 [x86 DVD ISO]  
Slackware Linux 15.0 [x86 DVD ISO]  

答案 1 :(得分:2)

您可以使用lxml.html来解析html文档:

from lxml import html

doc = html.parse('http://example.com')

for a in doc.cssselect('td a'):
    print a.get('href')
    print a.text_content()

您必须查看文档的结构,以找到确定所需链接的最佳方法(可能还有其他表格中包含您不需要的链接等等):您可能首先要例如,找到正确的table元素。除了css选择器(例如xpath)之外,还有一些选项可以搜索文档/元素。

如果需要,可以使用.make_links_absolute()方法将链接转换为绝对链接(解析后在文档上执行,所有网址都是绝对的,非常方便)