上回写了自己搞了一个小小的项目学习测试。
然后其中用到了一些知识点,个人觉得还是挺有意义和用途的,接下来写几篇稿子记录一下。

(Click Mario)
正文
数据分析第一步,就是要获取数据。
我这次爬的数据,是xml文本,然后通过对其中的标签进行判断,抓出需要的信息。
分析xml文本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="utf-8"?> <java version="" class=""> <object class="java.util.HashMap"> <void method="put"> <string>yy</string> <string>PP</string> </void> …… …… <void method="put"> <string>name</string> <string>李哈哈</string> </void> <void method="put"> <string>zhiweiname</string> <string>学习课代表</string> </void> …… …… </object> </java>
|
文本可以看出所有需要的信息,都是在void/string标签下的。
所以如果要抓姓名,就要先抓到void/string/text(),text值是“name”的位置,然后该位置的下一个string标签对应的位置,值就是姓名了。
其他所需要的信息同理。
抓取值的函数
分析好后,写了这样一个函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| def xml_info_parameter(data): tree = html.fromstring(data.encode('utf-8')) void = tree.xpath('//void[@method="put"]/string/text()') # xpath抓取出来的值,抓取出原因/员工等信息。 # 根据xml分析,以姓名为例,标签均为string,定位到string标签内容为name的索引,索引+1找到string标签的值为姓名。 # 找出index for index ,values in enumerate(void): # 使用了enumerate()函数,抓取list中的重复数据所在的索引。 if values == 'yy': index_reason = index elif values == 'name': index_name = index elif values == 'zhiweiname': index_zhiwei = index elif values == 'year': index_year = index elif values == 'zcrz': index_zcrz = index values_reason = void[index_reason + 1] values_name = void[index_name + 1] values_zhiwei = void[index_zhiwei + 1] values_year = void[index_year + 1] values_zcrz = void[index_zcrz + 1] return values_reason, values_name, values_zhiwei, values_year, values_zcrz
|
这样,所需要的信息就抓到了。
但是要注意下,如果有些值的位置是空的,那么函数抓出来的信息,有的时候会有误差。后面要对数据做一些清理的操作。
Author:
Konta
Discuss:
吐槽及留言
Permalink:
http://tech.hahaalot.com/2020/09/07/数据分析可视化的简单探究1/
License:
Copyright (c) 2020 CC-BY-NC-4.0 LICENSE
Slogan:
YOLO!