我使用Python脚本使用Selenium库从网站中提取信息。 使用一些选择器,我得到了一个目标元素的WebElement对象,之后看起来如下所示:
<myTargetElement><strong>324. </strong>Some interesting content that might contain numbers 323 or dots ...,;</myTargetElement>
我想分开提取两条信息:
由strong
标记包围的ID,我已完成以下操作:
myTargetElementObject.find_element_by_tag_name('strong').text.strip(' .')
现在我很困惑如何提取其他部分。如果我使用myTargetElementObject.text
,它将在文本中返回id。
我提取的数据非常大,我对使用正则表达式持谨慎态度。有没有办法使用WebElement对象返回没有子元素的元素文本?
答案 0 :(得分:2)
我会得到目标元素的完整文本并将其拆分为第一个.
:
strong, rest_of_the_content = myTargetElementObject.text.split(". ", 1)
总的来说,任务并不那么容易(这里你有一个明确的分隔符):你不能直接在selenium中定位和获取文本节点 - 比如following-sibling::text()
。一种常见的方法是获取子文本,父文本并从父文件中删除子文本:
另一种可能的方法是使用BeautifulSoup
进行一些单独的HTML解析,您可以在其中横向移动并访问文本节点:
from bs4 import BeautifulSoup
html = myTargetElementObject.get_attribute("outerHTML")
soup = BeautifulSoup(html, "html.parser")
label = soup.strong
text_after = label.next_sibling
print(label.get_text(), text_after)