разделить два тега и добавить их отдельно в Python BS4 - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть TR[2], который является динамическим, и я пытаюсь получить его так:

self.soup.select("#detail > tbody > tr > td:nth-of-type(2)")

Я хочу, чтобы все td[3] в нем были динамическими: у них может быть только строка или и строка, и <a href>, теперь я хочу разделить строку на одну переменную и «строку» этого тега <a> на другую, но важно то, что td не имеет <a> Я хочу, чтобы он добавил «None», потому что обе переменные должны иметь одинаковую длину и индекс, чтобы правильно «сжать» их для дальнейшего использования. Вот пример:

<td class='bolt'>
  "the text I want"
  <br>
  <a href='Javascript:void(0);'>the other text i want</a>
</td>

который при добавлении в var должен выглядеть так:

event = ["the text I want"]
vessel = ["the other text i want"]

и еще один «возможный» тд:

<td class='bolt'>
   "another string we need"
</td>

и окончательный результат:

event = ["the text I want","another string we need"]
vessel = ["the other text i want", None(or empty),]

1 Ответ

0 голосов
/ 07 ноября 2018

Если может быть один или два текстовых узла (как описано в вопросе), вы можете использовать

vessel = []
event = []
for td in self.soup.select("#detail > tbody > tr > td:nth-of-type(2)"):
    event.append([i.strip() for i in td.strings if i.strip()][0])
    vessel.append(([i.strip() for i in td.strings if i.strip()] + [None])[1])

print(event)
['"the text I want"', '"another string we need"']
print(vessel)
['the other text i want', None]

Дайте мне знать, если могут быть более сложные случаи

...