scrapy xpath如何获取源代码<script></script>里面的内容

小弟被这个问题折腾几天了,实在搞不定啊。恳求大神出马了。
网站:https://www.glprop.com.cn/net...
我要获取这个网站里面的物流地址信息情况。
可以直接通过查看源代码,发现内容都在xpath规则('//*[@id="shadow"]/script[5]/text()')里面

如下部分网页源码展示

<script>
var cities = [{"id":"312","name":"\u6606\u660e","name_en":"Kunming","lat":"25.04","lng":"102.73","lat_baidu":null,"lng_baidu":null},{"id":"313","name":"\u8d35\u9633","name_en":"Guiyang","lat":"106.639167","lng":"26.652807","lat_baidu":null,"lng_baidu":null},{"id":"314","name":"\u5357\u660c","name_en":"Nanchang","lat":"115.864872","lng":"28.690469","lat_baidu":null,"lng_baidu":null},{"id":"315","name":"\u77f3\u5bb6\u5e84","name_en":"Shijiazhuang","lat":"114.517217","lng":"38.049221","lat_baidu":null,"lng_baidu":null},{"id":"316","name":"\u5927\u592a\u539f","name_en":"Greater Taiyuan","lat":"112.557258","lng":"37.878357","lat_baidu":null,"lng_baidu":null},
</script>

里面有大量变量,,我其实只要获取var cities里面的内容,因为这里面是json格式,然后想json.loads()转成json格式。
不知道如何获取这些数据然后转换,很奇怪,既然我网页源代码可以看到这些数据,我在scrapy shell里面始用response.xpath('//*[@id="shadow"]/script[5]/text()')得到的确实空列表,按理说源代码里面可以看到的就不应该是动态ajax的啊。

阅读 9.5k
2 个回答

这种要用正则匹配了吧。

json.loads(re.findall('var cities = (.+);\n', response.body.decode('utf-8'))[0])

记得处理异常。

clipboard.png

json.loads(re.findall('var cities = (.+);n', response.body.decode('utf-8'))[0])
哈哈不过还是想追问下,这个(.+);n是匹配是啥意思哦。
我是这样写的re.findall('var cities =(.*);',response.text )

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题