BeautifulSoup извлекает текст внутри тд перед внутренними тэгами - PullRequest
1 голос
/ 25 марта 2020

Выполняя webscraping и мне нужно разделить содержимое <td> на две переменные для базы данных.

<td align="left">
  "Text i need to extract first"
  <br>
  <strong title="code">474308972347089374324</strong> #text i need to extract secoond
</td>

Этот раздел находится в таблице, внутри тега tr с несколькими другими тегами td

Заранее спасибо

РЕДАКТИРОВАТЬ

Код, сколько я могу показать

soup = BeautifulSoup(destination.content, "lxml")
pakid = soup.find("table", {"class": "aared"})
read = pakid.findAll("tr")
for row in read:
    content = row.findAll("td")
    id = content[0].text # works well
    name = content[1].next_sibling(text=True)
    name = name[0]

Следующий брат дает список, и я могу выбрать первый или второй элемент из списка, но это кажется грязным, есть идеи, как сделать его чище?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Другое решение.

from simplified_scrapy import SimplifiedDoc, req, utils
html = '''
<table class="aared">
<tr>
<td align="left">
  "Text i need to extract first"
  <br>
  <strong title="code">474308972347089374324</strong> #text i need to extract secoond
</td>
</tr>
</table>
'''
doc = SimplifiedDoc(html)
trs = doc.select('table.aared').trs.tds
for tr in trs:
  id = tr[0].firstText()
  name = tr[0].strong.text
  print (id)
  print (name)

Результат:

"Text i need to extract first"
474308972347089374324
1 голос
/ 25 марта 2020

IIU C, вы можете сделать что-то вроде этого:

from bs4 import BeautifulSoup

h = """
    <td align="left">
      "Text i need to extract first"
      <br>
      <strong title="code">474308972347089374324</strong> #text i need to extract secoond
    </td>
    """

soup = BeautifulSoup(h, "lxml")
obj = soup.select_one('td')
print(obj.<b>find(text=True, recursive=False).strip()</b>)
print(obj.<b>select_one('strong').text</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...