BeautifulSoup在特定标签中查找文本

时间:2018-05-01 22:51:18

标签: python beautifulsoup

使用BeautifulSoup,我试图打印特定标签内的文字,问题是我要打印的文字位于<tr>标签和网页内的标签内有30 <tr>个标签。 我需要打印的文本位于<td>标记的第19个匹配内的第二个<tr>标记中。 它看起来像这样:

<tr>...</tr>
<tr>...</tr>
<tr>
    <td class="QL">Text1</td>
    <td class="QL">Text2</td>
    <td class="QL">Text3</td>
</tr>
<tr>...</tr>
<tr>...</tr>

我想打印Text2。

我的尝试在这里:

from urllib.request import urlopen
from bs4 import BeautifulSoup
quote_page = 'http://google.com'
page = urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
for link in soup.find("td", {"class": "QL"}):
    print(link)

实际上,它打印了第一次出现的<td class="QL">标签。如何让它在第19次出现的标签内打印文本而不打印Text1和Text3?

3 个答案:

答案 0 :(得分:1)

您可以将enumeratefind_all

一起使用
result = [a.text for i, a in enumerate(soup.find_all("td", {"class": "QL"}), start=1) if i == 19][0]

答案 1 :(得分:1)

如果您知道要查找的标记的确切位置,可以使用find_all()返回列表,然后从所需索引中获取标记。

在这种情况下,(19 <tr>和2nd <td>)使用此:

result = soup.find_all('tr')[18].find_all('td')[1].text

答案 2 :(得分:0)

可以是这个。

{{1}}