我试图找到一种方法来拉出一些链接及其相关文本与美丽的汤。 HTML如下:
<tr>
<td align="left" bgcolor="#ffff99">
<font size="2">
<a href="link/I/Want.htm">
<b>Text I Want</b>
</a>
</font>
</td>
<tr>
<td align="left" bgcolor="#ffff99">
<font size="2">
<a href="link/I/Want.htm2">
<b>Text I Want2</b>
</a>
</font>
</td>
我可以拉链接没问题:
soup.find_all('a', href=re.compile('link/I/Want'))
但是我希望能够提取文本并将其与链接相关联。要么让它们在列表中背靠背,要么将它们放在相同顺序的单独列表中,这样我就可以使用zip()函数。
答案 0 :(得分:5)
你可以试试这个:
links = []
for link in soup.find_all('a', href=re.compile('link/I/Want')):
links.append({"link" : link["href"], "text": link.find_all("b")[-1].get_text(strip=True)})
print (links)
输出:
[{&#39; link&#39;:&#39; link / I / Want.htm&#39;,&#39; text&#39;:&#39; Text I want&#39;}, {&#39; link&#39;:&#39; link / I / Want2.htm&#39;,&#39; text&#39;:&#39; Text I want2&#39;}]
答案 1 :(得分:0)
使用dict理解从汤对象中获取数据。
get_text()
将连接所有后代文本。
links = soup.find_all('a', href=re.compile('link/I/Want'))
data = {link.get_text(strip=True): link['href'] for link in links}
出:
{'Text I Want': 'link/I/Want.htm', 'Text I Want2': 'link/I/Want.htm2'}
答案 2 :(得分:-2)
s.html是html文件
我们可以在所有标签中提取文本内容,如下所示
from BeautifulSoup import *
fh = open('s.html')
html = fh.read()
soup = BeautifulSoup(html)
tags = soup('a')
for tag in tags:
print tag.get('href',None),soup.find('a').findNext('b').contents[0]