Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scrapy:提取作为文本存储在脚本标记中的字典_Python_Scrapy_Abstract Syntax Tree - Fatal编程技术网

Python Scrapy:提取作为文本存储在脚本标记中的字典

Python Scrapy:提取作为文本存储在脚本标记中的字典,python,scrapy,abstract-syntax-tree,Python,Scrapy,Abstract Syntax Tree,主题:提取存储在脚本标记中的字典 你好, 我正试图从标签上刮取这些数据 目标是能够提取数据字典并获得每个键值对的值 Example: print(digitalData['page']['pageInfo']['language']) >>> en 我已经编写了下面的代码,在第3步尝试使用ast模块将字符串转换为字典之前,一切都正常 我收到以下错误消息: ValueError: malformed node or string: <_ast.Name object a

主题:提取存储在脚本标记中的字典

你好,

我正试图从标签上刮取这些数据

目标是能够提取数据字典并获得每个键值对的值

Example:
print(digitalData['page']['pageInfo']['language'])
>>> en
我已经编写了下面的代码,在第3步尝试使用ast模块将字符串转换为字典之前,一切都正常

我收到以下错误消息:

ValueError: malformed node or string: <_ast.Name object at 0x00000238C9100B48>
ValueError: malformed node or string: <_ast.Name object at 0x00000238C9100B48>
我收到以下错误消息:

ValueError: malformed node or string: <_ast.Name object at 0x00000238C9100B48>
ValueError: malformed node or string: <_ast.Name object at 0x00000238C9100B48>
ValueError:节点或字符串格式错误:

请提供如何解决问题的意见。如果有其他方法来解决问题,请提出建议。

您的问题是在提取的Javascript字典中:您有对象

{
第页:{
页面信息:{
destinationURL:window.location.href,
错误:“”,
语言:"en",,
国家:"美国",,
pageName:“tangelo2”,
第条发布日期:'',
articleenddate:“”,
页面标题:“健康服务创新公司”,
页面所有者:“”,
页面模板:“”,
页面活动:“”,
标签:“”,
pageLastPublishDate:'2020-01-08T12:15:04.032-06:00',
pageLastPublishedBy:'管理员',
pageLastModifiedDate:“2020-01-08T10:24:36.466-06:00”,
pageLastModifiedBy:“卡特里娜”
},
更新引擎:{
标题:"家",,
图像:“”,
说明:“”
},
类别:{
siteName:window.location.hostname.replace(“www.,”),
版本:“3.0”,
内容类型:“”,
contentTopic:“”,
contentSegment:“”,
内容倡议:“,
contentProduct:“”,
contentProductLine:“”,
主要类别:“tangelo2”
}
},
事件:{}
}
请注意
page.pageInfo.destinationURL
以及
page.category.siteName

所发生的事情是,
ast.literal\u eval
或任何其他您可能尝试将此Javascript字典转换为Python的方法将导致错误。在通过
ast
demjson
或任何其他工具进行处理之前,您需要找到一种方法从
my_dict['digitalData']
中删除
窗口…


一个可能的解决方案是这样的,利用as来反对
ast

import scrapy
导入pprint
进口demjson
进口稀土
等级OptumSpider(刮毛蜘蛛):
名称='optum'
允许的_域=['optum.com']
起始URL=['http://optum.com/']
def解析(自我,响应):
#步骤1:删除所有空格、新行和制表符
字符串=(re.sub('[\s+;]','',response.xpath('//script/text()')[2].extract()))
#步骤2:将字符串转换为字典。将密钥创建为“digitalData”
js_dict=string.split(“=”)[1]
js_dict=re.sub(r“\bwindow(.*?),”b“,”js_dict)
#步骤3:提取字典
my_dict=demjson.decode(js_dict)
pprint.pprint(我的字典)
打印(键入(我的字典))
跑步时

scrapy runspider test.py -s LOG_ENABLED=False
它输出:

{'event': {},
 'page': {'category': {'contentInitiative': '',
                       'contentProduct': '',
                       'contentProductLine': '',
                       'contentSegment': '',
                       'contentTopic': '',
                       'contentType': '',
                       'primaryCategory': 'tangelo2',
                       'siteName': '',
                       'version': '3.0'},
          'pageInfo': {'articleenddate': '',
                       'articlepubdate': '',
                       'country': 'US',
                       'destinationURL': '',
                       'error': '',
                       'language': 'en',
                       'pageCampaign': '',
                       'pageLastModifiedBy': 'katrina',
                       'pageLastModifiedDate': '2020-01-08T10:24:36.466-06:00',
                       'pageLastPublishDate': '2020-01-08T12:15:04.032-06:00',
                       'pageLastPublishedBy': 'admin',
                       'pageName': 'tangelo2',
                       'pageOwner': '',
                       'pageTemplate': '',
                       'pageTitle': 'HealthServicesInnovationCompany',
                       'tags': ''},
          'recEngine': {'description': '', 'image': '', 'title': 'Home'}}}
<class 'dict'>
{'event':{},
'页面':{'category':{'contentInitiative':'',
“内容产品”:“,
“contentProductLine”:“,
“contentSegment”:“,
“内容主题”:“,
“contentType”:“,
“primaryCategory”:“tangelo2”,
“站点名称”:“,
'version':'3.0'},
'pageInfo':{'articleenddate':'',
“articlepubdate”:“,
‘国家’:‘美国’,
“destinationURL”:“,
“错误”:“,
‘语言’:‘en’,
“pageCampaign”:“,
“pageLastModifiedBy”:“卡特里娜”,
“pageLastModifiedDate”:“2020-01-08T10:24:36.466-06:00”,
“pageLastPublishDate”:“2020-01-08T12:15:04.032-06:00”,
“pageLastPublishedBy”:“管理员”,
“pageName”:“tangelo2”,
“页面所有者”:“,
“页面模板”:“,
“页面标题”:“健康服务创新公司”,
'标签':''},
'接收引擎':{'description':'','image':'','title':'Home'}}

您的问题是在提取的Javascript字典中:您有对象

{
第页:{
页面信息:{
destinationURL:window.location.href,
错误:“”,
语言:"en",,
国家:"美国",,
pageName:“tangelo2”,
第条发布日期:'',
articleenddate:“”,
页面标题:“健康服务创新公司”,
页面所有者:“”,
页面模板:“”,
页面活动:“”,
标签:“”,
pageLastPublishDate:'2020-01-08T12:15:04.032-06:00',
pageLastPublishedBy:'管理员',
pageLastModifiedDate:“2020-01-08T10:24:36.466-06:00”,
pageLastModifiedBy:“卡特里娜”
},
更新引擎:{
标题:"家",,
图像:“”,
说明:“”
},
类别:{
siteName:window.location.hostname.replace(“www.,”),
版本:“3.0”,
内容类型:“”,
contentTopic:“”,
contentSegment:“”,
内容倡议:“,
contentProduct:“”,
contentProductLine:“”,
主要类别:“tangelo2”
}
},
事件:{}
}
请注意
page.pageInfo.destinationURL
以及
page.category.siteName

所发生的事情是,
ast.literal\u eval
或任何其他您可能尝试将此Javascript字典转换为Python的方法将导致错误。在通过
ast
demjson
或任何其他工具进行处理之前,您需要找到一种方法从
my_dict['digitalData']
中删除
窗口…


一个可能的解决方案是这样的,利用as来反对
ast

import scrapy
导入pprint
进口demjson
进口稀土
等级OptumSpider(刮毛蜘蛛):
名称='optum'
允许的_域=['optum.com']
起始URL=['http://optum.com/']
def解析(self,re)