HTML:
<tbody>
<tr >
<td> Type1 </td>
<td class="wpsTableNrmRow" > This is Node1
<a href:applicatiodetailaddress> all Nodes </a>
</td>
</tr>
<tr >
<td> Type2 </td>
<td class="wpsTableNrmRow" > This is Node2 </td>
</tr>
<tr >
<td> Type3 </td>
<td class="wpsTableNrmRow" > </td>
</tr>
</tbody>
代码:
applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow"]')]
print(applicationData)
输出:
["This is Node1", "This is Node2", ""]
我正在从表格中抓取数据,同时也抓取了空文本。我不想刮空文本。
我尝试了 ('//td[normalize-space(@class="wpsTableNrmRow")]')
、('//td[@class="wpsTableNrmRow"]')/*normalize-space()
和 (//td[@class="wpsTableNrmRow"]/*[.!=''])
,但没有奏效。
我该怎么做?
答案 0 :(得分:0)
您可以对 list comprehensions 应用条件,如果变量通过条件,它会将函数应用于变量。
像这样:
[f(x) for x in sequence if condition]
应用于您的代码:
applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow"]') if td.get_attribute("textContent").strip() == ""]
print(applicationData)
答案 1 :(得分:0)
您可以使用 locor 来确保文本不为空:
//td[@class="wpsTableNrmRow" and text()!=" "]
所以使用:
applicationData = [td.get_attribute("textContent").split("\n")[
0] for td in driver.find_elements_by_xpath('//td[@class="wpsTableNrmRow" and text()!=" " and text()!=""]')]
print(applicationData)
答案 2 :(得分:0)
translate
函数看起来可以很好地解决您的问题:
applicationData = [td.get_attribute("textContent").split("\n")[0] for td in webBrowser.find_elements_by_xpath('//td[@class="wpsTableNrmRow" and translate(text(), " ", "")]')]
print(applicationData)