查看原文
其他

js2xml:将javascript字符串转换为xml

2018-01-19

作者 大邓

有时候爬数据遇到像下面这种,数据在script标签中以javascript形式存在。

<script type="text/javascript">    var totalReviewsValue = 32;    var averageRating = 4.5;    if(totalReviewsValue != 0){        events = "...";    }
</script>

一般我们都是通过正则的方式抽取,其实还可以使用js2xml。将js转换为xml标记的文本,这样就可以通过抽取。

先提前出js文本

from pyquery import PyQuery as pq
doc = pq(html)js_text = doc('script').text()

print(js_text)
var totalReviewsValue = 32;    var averageRating = 4.5;    if(totalReviewsValue != 0){        events = "...";    }

js2xml

import js2xml doc = pq(html)

js_text = doc('script').text()

parse_js = js2xml.parse(js_text)

print(type(parse_js))
print(parse_js)
<class 'lxml.etree._Element'> <Element program at 0x10f136888>

为了方便我们查看Element对象,使用下面的代码:

js2xml.pretty_print(data)

wow,返回我们熟悉的标记语言字符串。

<program>  <var name="totalReviewsValue">    <number value="32"/>  </var>  <var name="averageRating">    <number value="4.5"/>  </var>  <if>    <predicate>      <binaryoperation operation="!=">        <left>          <identifier name="totalReviewsValue"/>        </left>        <right>          <number value="0"/>        </right>      </binaryoperation>    </predicate>    <then>      <block>        <assign operator="=">          <left>            <identifier name="events"/>          </left>          <right>            <string>...</string>          </right>        </assign>      </block>    </then>  </if>
</program>

因为parse_js是lxml库的Element类对象。如果我们熟悉lxml库的话,应该知道可以使用xpath或者css定位数据。

我们想获取name=averageRating节点里的number节点中的value属性的值。

number = parse_js.xpath("//program/var[@name='averageRating']/number/@value")

print(number)print(number[0])
['4.5'] 4.5


相关阅读

Python中处理日期时间库的使用方法

三分钟掌握文件格式识别

为什么你要为2019,而不是2018做计划?

2017年度15个最好的数据科学领域Python库

迅雷不给力,我DIY了个下载器

计算运行时间-装饰器实现

花十分钟,给爱机安装个MongoDB

使用Python登录QQ邮箱发送QQ邮件

WTF Python: 开启你的懵逼模式

8行代码实现微信聊天机器人

优雅简洁的列表推导式

Get小技巧等分列表

如何对数据进行各种排序?

数据结构:队列与堆栈 

else除了跟if很搭,你还知道其他的关键词吗?

数据采集

【视频讲解】Scrapy递归抓取简书用户信息

【实战视频】使用scrapy写爬虫-爬知乎live

如何将html中的表格数据保存下来

美团商家信息采集神器

gevent:异步理论与实战

selenium驱动器配置详解

爬虫神器PyQuery的使用方法

简易SQLite3数据库学习

当爬虫遭遇验证码,怎么办


文本处理分析

gensim:用Word2Vec进行文本分析

RAKE:快速自动抽取关键词算法

对于中文,nltk能做哪些事情

基于共现发现人物关系的python实现

用pyecharts制作词云图

留在网上的每个字,都在泄露你的身份


图片数据处理

OpenCV:快速入门图片人脸识别

好玩的OpenCV:图片操作的基本知识(1)

好玩的OpenCV:图像操作的基本知识(2)

OpenCV:计算图片有多色


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存