我是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]”来搜索解析树。在搜索和阅读文档后我一直在尝试各种各样的东西,但我仍然不确定如何去做。
答案 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()
方法将链接转换为绝对链接(解析后在文档上执行,所有网址都是绝对的,非常方便)