Как извлечь текст, игнорируя вложенный тег, где мне нужен текст в <td>, но не во вложенном <strong> - PullRequest
0 голосов
/ 28 июня 2018

Я хочу игнорировать вложенный тег в <td> в приведенном ниже коде. Я просто хочу целые числа (число) в <td>, а не текст, который включен в тег <strong> Я написал код селена, но он возвращает весь текст в <td>. Есть ли способ, которым я игнорирую вложенные и получаю число, которое находится в <td>

Код Python:

 wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#middle > table > tbody > tr:nth-child(2) > td:nth-child(1) > table > tbody > tr:nth-child(1) > td')))
 data = driver.find_elements_by_css_selector("#middle > table > tbody > tr:nth-child(2) > td:nth-child(1) > table > tbody > tr:nth-child(1) > td")
    print(data[0].text)

ВЫХОД :: Номер посылки 71200000

Но я хочу только 71200000

HTML:

<table width="100%">
    <tbody>
        <tr style="">
            <td><strong>Parcel Number</strong> 71200000</td>
        </tr>
        <tr style="">
            <td><strong>Tax Area</strong> 19A - TAX DISTRICT 19A</td>
        </tr>
        <tr style="">
            <td><strong>Situs Address</strong> </td>
        </tr>
        <tr style="">
            <td><strong>Legal Summary</strong> W.H.M. SECTION A BLK 1 LOT 1 CONT. 7.14 AC</td>
        </tr>
    </tbody>
</table>

Ответы [ 5 ]

0 голосов
/ 28 июня 2018

Для извлечения нужных текстов вы также можете использовать Python's split() следующим образом:

all_data = WebDriverWait(driver, 20).until.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#middle > table > tbody > tr:nth-child(2) > td:nth-child(1) > table > tbody > tr:nth-child(1) > td')))
for data in all_data:
    print(data.text.split(">")[2]) 
0 голосов
/ 28 июня 2018

Следующий код может вам помочь.

wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#middle > table > tbody > tr:nth-child(2) > td:nth-child(1) > table > tbody > tr:nth-child(1) > td')))
    data = driver.find_elements_by_css_selector("#middle > table > tbody > tr:nth-child(2) > td:nth-child(1) > table > tbody > tr:nth-child(1) > td")
    print(data[0].text)
    data_child = data[0].find_element_by_tag_name("strong")
    data_parent = data[0].text.replace(data_child.text,'')
    print(data_parent)
0 голосов
/ 28 июня 2018

Использование регулярных выражений.

import re
output = "Parcel Number 71200000"
m = re.search(r"\d+", output)
if m:
    print(m.group())

Выход:

71200000
0 голосов
/ 28 июня 2018

Вы можете использовать функцию декомпозировать , чтобы удалить текст в теге <strong> и получить только текст в теге <td>.

content = BeautifulSoup(yourhtml, 'html.parser')
tds = content.find_all('td')
tds[0].find("strong").decompose()
print(tds[0].text.strip())

Выход: 71200000

0 голосов
/ 28 июня 2018

В Java вы можете сделать что-то вроде -

data.substring(data.indexOf("</strong>")+"</strong>".length(), data .length()));

Может быть, вы можете конвертировать его:)

...