如何提取文本而忽略嵌套标签,而我在嵌套标签中不需要嵌套<strong>

时间:2018-06-28 06:52:07

标签: python html selenium web-scraping css-selectors

我想在下面的代码中忽略<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 :(得分:1)

以下代码可能会对您有所帮助。

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)

答案 1 :(得分:0)

在Java中,您可以执行以下操作-

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

也许您可以将其转换为:)

答案 2 :(得分:0)

使用正则表达式。

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

输出:

71200000

答案 3 :(得分:0)

您可以使用分解函数删除<strong>标签中的文本,而仅获取<td>标签中的文本。

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

输出: 71200000

答案 4 :(得分:0)

要提取所需的文本,您还可以使用 Python的 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])