BeautifulSoup найти текст в определенном теге - PullRequest
0 голосов
/ 02 мая 2018

С 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 голосов
/ 02 мая 2018

Поскольку вам известны точные позиции тегов, которые вы хотите найти, вы можете использовать find_all(), который возвращает список, а затем получает тег из нужного индекса.

В этом случае (19 <tr> и 2 <td>) используйте это:

result = soup.find_all('tr')[18].find_all('td')[1].text
0 голосов
/ 10 октября 2018

Может быть это.

result = [ x.text for x in soup.select('tr > td:nth-of-type(2)')]
0 голосов
/ 02 мая 2018

Вы можете использовать enumerate с find_all:

result = [a.text for i, a in enumerate(soup.find_all("td", {"class": "QL"}), start=1) if i == 19][0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...