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

点击跳转

(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

这样,所需要的信息就抓到了。
但是要注意下,如果有些值的位置是空的,那么函数抓出来的信息,有的时候会有误差。后面要对数据做一些清理的操作。