繁体   English   中英

Python:使用 XPath 从脚本标签中提取文本

[英]Python: Extract Text from Script Tag using XPath

我正在尝试使用 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>

您的响应对象似乎是来自某些http.request的响应。

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

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

另请注意,您的代码包含这样一个缺陷,即您未能将路径括在引号中(单引号或双引号)。 但即使你这样做了,结果也将是一个文本节点列表,只包含 1 个元素。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM