python - 如何通过xpath提取html dom中文本节点的文本?
问题描述
我正在尝试访问一个网络数据库,以了解他们对某些数学论文的分类。在下面的 HTML 中,“数学”将是所需的结果。类别还包括“应用数学”和“统计学”。具体来说,我想在这个在线数据库的不同网站上为许多不同的数学论文迭代执行此过程,并且我无法搜索特定的 xpath,因为 xpath 因纸张而异。
HTML 代码:
<p class="FR_field">
<span class="FR_label">Web of Science Categories:</span>Mathematics</p>
例如,“数学”位于
//*[@id="records_form"]/div/div/div/div[1]/div/div[8]/p[2]/text()
对于该特定纸张,但 p 标签或其中一个 div 标签的索引可能会因纸张而异。我为查找类别而编写的代码是
用于远程访问的 Python 代码:
driver.find_element_by_xpath("//*[contains(text(), 'Web of Science Categories:')]").text[26:]
但这似乎不起作用,如果我打印结果,它不会打印任何内容。可能是因为我尝试进行额外的文本拆分而遇到此错误吗?我只想要“数学”而不是“Web of Science Categories:数学”,所以我将结果拆分为 26 个字符。
编辑:所以经过一些进一步的测试,似乎我确实得到了结果,但它没有打印,因为我的 python 代码只看到“Web of Science Categories:”自然,在第 26 个字符处拆分这个字符串不会打印任何内容。然而,这提出了如何实际获得“数学”而不是“科学网络类别”的新难题:
解决方案
根据您提供的用于提取文本数学的 HTML,您可以使用以下代码行:
text1 = driver.find_element_by_xpath("//p[@class='FR_field']").get_attribute("innerHTML").splitlines()[2]
推荐阅读
- python - 只保留恰好出现一次的行
- apache - 启动 httpd:/usr/sbin/httpd:符号查找错误:/usr/sbin/httpd:未定义符号:apr_procattr_perms_set_register
- tensorflow - 将 Google colab 连接到 Google Cloud Platform 中的 VM 实例?
- laravel - Laravel Cache 的 owner release 和 forceRelease 的区别
- python - Django 搜索向量
- django - 在启动 celery 和 celery-beat 容器之前等待 django app 容器运行以防止 UniqueViolation 错误?
- database - How do we perform swap operation in conflict-serializability?
- python - Apache Airflow 中的 Python 语法
- python - MATLAB中是否有与纤维测量等效的Python函数?
- python - Pytorch,将顺序输出转换为二进制的标准层?