【问题标题】:Python: Extract Text from Script Tag using XPathPython:使用 XPath 从脚本标签中提取文本
【发布时间】:2020-01-25 14:18:45
【问题描述】:

我正在尝试使用 xpath 来访问下面 html 中的文本。

我写了这个语句 response.xpath(//script/text()) 来提取标签中的文本。出于某种原因,我没有看到预期的数据文本。谁能看到我做错了什么?

Method: response.xpath(//script/text())

<script>
digitalData={
                       page:{
                pageInfo:{
                    destinationURL:window.location.href,
                    error:'',
                    language:'en' ,
                    country:'US' ,
                    pageName:'tangelo2' ,
                    articlepubdate:'' ,
                    articleenddate:'' ,
                    pageTitle: 'Health Services Innovation Company',
                    pageOwner:'' ,
                    pageTemplate:'' ,
                    pageCampaign:'',
                    tags:'',
                    pageLastPublishDate:'2020-01-08T12:15:04.032-06:00',
                    pageLastPublishedBy :'admin',
                    pageLastModifiedDate:'2020-01-08T10:24:36.466-06:00',
                    pageLastModifiedBy :'katrina'
                },
               recEngine:{
                    title:'Home',
                    image:'',
                    description:''
                },
                category:{
                    siteName: window.location.hostname.replace("www.", "") ,
                    version:'3.0',

                    contentType: '',

                    contentTopic: '',
                    contentSegment: '',
                    contentInitiative: '',
                    contentProduct: '',
                    contentProductLine: '',


                    primaryCategory:'tangelo2'
                }  
           },
         event:{ }

        };
</script>

【问题讨论】:

  • 你的预期输出是什么?
  • 显示有问题的最小工作代码与您的问题。当前代码应该为您提供脚本中的所有文本 - 如果您只是没有收到任何错误消息,因为您在 xpath("//script/text()") 中忘记了 " "
  • 我正在尝试提取“digitalData”字典。一旦我从脚本标签中提取字典,我就可以解析它。
  • 如果你有 XHTML 还有命名空间问题...
  • 由于某种原因,我没有看到预期的数据文本。 如果没有预期的输出,或者 minimal reproducible example... 看起来很正常,我们将无能为力不过对我来说。

标签: python xpath lxml


【解决方案1】:

您的 response 对象似乎是一些 http.request 的响应。

所以要获取脚本内容,所需操作的顺序如下:

  • txt = Response.content - 获取此响应的内容(字符串)。
  • root = etree.fromstring(txt) - 解析这个字符串,获取元素 树。
  • script = root.xpath('//script')[0].text - 获取脚本内容(更多 详细说明见下文)。可能您还应该添加 必需的命名空间。

另请注意,您的代码包含您未能附上的缺陷 引号中的路径(单引号或双引号)。 但即使你这样做了,结果也会是文本节点的 list,其中包含 只有 1 个元素。

我的解决方案更简单、更直观,因为它:

  • 读取匹配节点列表(root.xpath('//script')),
  • 采用第一个 ([0]) - 一个文本节点,
  • 从中检索文本内容 (.text)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2020-12-07
    相关资源
    最近更新 更多