使用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?
答案 0 :(得分:1)
您可以将enumerate
与find_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}}