PythonWebScrape-任何解析脚本标记的简单方法

PythonWebScrape-任何解析脚本标记的简单方法,python,Python,我试图在抓取网页时从下面的脚本标签中获取一些信息,比如职位、大小、行业。有没有简单且可复制的方法?因为我需要刮很多页 我试着把它转换成一个字符串,去掉前面和后面多余的部分,然后使用eval,但是它显示了一个语法错误 window.gdGlobals=window.gdGlobals|| [{ '分析SID':“UA-2595786-1”, “analyticsUrl”:“/jobview/jobs/joblisting/Teradata Corporation”, 'deferredScri

我试图在抓取网页时从下面的脚本标签中获取一些信息,比如职位、大小、行业。有没有简单且可复制的方法?因为我需要刮很多页

我试着把它转换成一个字符串,去掉前面和后面多余的部分,然后使用
eval
,但是它显示了一个语法错误


window.gdGlobals=window.gdGlobals||
[{
'分析SID':“UA-2595786-1”,
“analyticsUrl”:“/jobview/jobs/joblisting/Teradata Corporation”,
'deferredScriptType':“text/x-deferred-js”,
“accessDeniedRedirectUrl”:“,
“locale”:“en-US”,
“环境”:“产品”,
“设备”:{
"手持式":假,,
"碑":假,,
“deviceTypeId”:1,
“platformTypeId”:3,
“viewTypeId”:4
},
“第页”:{
“域名”:“www.glassdoor.com”,
'domainId':1,
“域后缀”:“,
“组”:“工作列表”,
“guid”:“00000 1675B5FA6A78FA0AC61FE36E9B6”,
“flex”:对,
'部分':“作业列表”,
“类型”:“作业列表:作业列表”,
'id':“作业列表:作业列表”,
“医学”:“,
“src”:“,
“内容”:“,
“活动”:“,
“术语”:“,
“状态”:“已锁定”,
“untranslatedUrl”:https://www.glassdoor.com/job-listing/service-management-business-analyst-teradata-JV_IC1147311_KO0,35_KE36,44.htm?jl=3032410565'
},
“用户”:{
“guid”:“2917b9da-9897-4a3b-90c6-da49238a5924”,
“ipAddr”:“70.95.16.113”,
'地区':“en_US”,
‘国家’:‘美国’,
'ipLocationId':“1147311”,
“ipLocationType”:“C”,
“elligibleForAppBoy”:错误
},
“供应商”:{
“fbReqPerms”:“
},
“搜索”:{
“关键字”:”
},
“雇主”:{
“大小”:“10000--1”,
“部门”:“信息技术”,
'sectorId':“10013”,
‘工业’:‘计算机硬件和软件’,
“行业ID”:“200060”,
“名称”:“Teradata”,
“id”:“14638”
“地点”:“圣地亚哥”
,'locationId':“1147311”
,'locationType':“C”
},
“工作”:{
“职位名称”:“服务管理业务分析师”,
“城市”:“,
“状态”:“,
“国家”:“,
“id”:“3032410565”,
'作业来源':“6938”,
“hasPostalAddress”:0,
“HasOccupationCategory”:1,
“hasSalaryCurrency”:1,
“hasGeoCoordinates”:1,
‘类别’:‘10014’,
“过期”:“false”
},
“测试”:{
“计划主义者”:[
,“jobViewDomain.exp\u jobViewDomain\u catchall”
,“savedJobsDomain.non_user_saved_jobs_catchall”
,“紧迫性,2018年10月15日”
,“easyApplyDomain.exp\u easyApplyDomain\u catchall”
,“jobDetailsDomain.exp\u jobDetailsDomain\u catchall”
,“serpDomain.exp_serpDomain_catchall”
,“serpDomain.ReviseFaceCounts_2018_11_06”
,“jxGlobalDomain.2018\u 11\u 20\u exp\u userReg”
,“我的工作领域。2018\u 09\u 06\u我的工作领域过滤器”
“紧急情况,紧急情况”
,“作业视图.提取字段”
,“jxGlobalDomain.exp\u jxGlobalDomain\u catchall”
,“jx_global.2018_06_25_xToSerpUrgencyBadge”
,“jobs-ux-dk-2.重定向到主页”
,“jobAlertDomain.exp\u jobAlertDomain\u catchAll”
],
“planoutTreatmentList”:[
,“jobViewDomainDefaultTreatment”
,“SavedJobs默认处理”
“七棵树徽章”
,“易应用默认治疗”
,“作业详细信息错误处理”
,“SERPDEFAULTTREATION”
,“ReviseFaceCounts\u on”
,“userReg\u控件”
,“我的工作过滤器打开”
,“紧急情况\默认情况”
“假”
,“jxGlobalDefaultTreatment”
,“xToSerpUrgencyBadge_on”
,“savedJobsRedirect false”
,“jobAlertDefaultTreatment”
]
},
“静态列表”:{
}
}];
window.getGdGlobals=window.getGdGlobals||
函数(){
返回gdGlobals[0];
};
GD=window.GD |{};
GD.pageInfo=GD.pageInfo |{};
GD.pageInfo.pageGroup=getGdGlobals().page.group;
GD.domain=getGdGlobals().page.domain;

假设脚本位于名为
script
的python变量中

import json
import re
script = '''
'''
<script>
    window.gdGlobals = window.gdGlobals ||
        [{
            'analyticsId':                      "UA-2595786-1",
...
</script>
'''
script = script.replace('\n', ' ').replace('\t', ' ').replace("'", '"')
myvars = re.search(r"window.gdGlobals\s*\|\|\s*\[({.*})\];", script).group(1);
myvars = re.sub('\[\s*,', '[', myvars)
myvars = json.loads(myvars)
print(myvars['employer'])
正则表达式将非常脆弱,因此您可能希望比本例中更聪明一些

{'size': '10000--1',
 'sector': 'Information Technology',
 'sectorId': '10013',
 'industry': 'Computer Hardware &amp; Software',
 'industryId': '200060',
 'name': 'Teradata',
 'id': '14638',
 'location': 'San Diego',
 'locationId': '1147311',
 'locationType': 'C'}