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)