如何使用BeautifulSoup在href标签下面拉<b> text </b>?

时间:2017-03-25 22:59:45

标签: python python-3.x web-scraping beautifulsoup

我试图找到一种方法来拉出一些链接及其相关文本与美丽的汤。 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()函数。

3 个答案:

答案 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]