list和字典爬虫常用的处理

1.遍历列表同时获取元素及下标

for item in List:
	print(item)

这种方法可以直接循环取出列表的每一个元素,但是会有一个缺点,就是虽然取出了元素,但是不知道取出的元素所对应的下标是多少。

如果要取出元素,同时知道对应的下标,该怎么做呢?
可以使用如下方法:

方法1:

for i in range(len(List)):
	print(i, List[i])

方法2:

for i, item in enumerate(List):
	print(i, item)

对于方法2来说:

之前写完 enumerate,后来看了 Python cookbook,发现 enumerate 还可以带一个参数,之前在使用的过程当中,下标 index 默认是从 0,如果我们要从 1 ,或者其他的 index 开始,可以设置一个初始参数,如下:

items = ['a', 'b', 'c', 'd']
start = 2
for i, item in enumerate(items, start):
    print(i, item)

输出结果:

2 a
3 b
4 c
5 d

2. 字典的遍历3种方法

2.1 keys()
# keys() 该方法会返回字典的所有的key
#  该方法会返回一个序列,序列中保存有字典的所有的键
hero_data = {'hero_name':'李元芳','age':29,'gender':'男'}
print(hero_data.keys())
print()
# 通过遍历keys()来获取所有的键
for k in hero_data.keys() :
  print(k , hero_data[k])

输出结果:

dict_keys(['hero_name', 'age', 'gender'])

hero_name 李元芳
age 29
gender 男
2.2 values()
# 该方法会返回一个序列,序列中保存有字典的所有的值
hero_data = {'hero_name': '李元芳', 'age': 29, 'gender': '男'}
for v in hero_data.values():
  print(v)

输出结果:

李元芳
29
2.3 items()
# 该方法会返回字典中所有的项
# 它会返回一个序列,序列中包含有双值子序列
# 双值分别是,字典中的key和value
hero_data = {'hero_name': '李元芳', 'age': 29, 'gender': '男'}
print(hero_data.items())
for k, v in hero_data.items():
	print(k, '=', v)

输出结果:

dict_items([('hero_name', '李元芳'), ('age', 29), ('gender', '男')])
hero_name = 李元芳
age = 29
gender =

3.同时遍历两个list

需求是将两个list同时进行遍历,然后同步的将每个元素add到一个dict中,虽然有麻烦的方式,比如直接用list的数组下标可以实现,但是一点也不pythonic,于是想到了zip内置函数。

dict_1 = {}
list_1 = ['a', 'b', 'c']
list_2 = ['1', '2', '3']
""" zip打包用法,同时遍历两个list """
for symbol, digit in zip(list_1, list_2):
	dict_1[symbol] = digit
print(dict_1)

输出结果:

{'a': '1', 'b': '2', 'c': '3'}

卧艹,简直比java实现该功能要简单的多得多。

ps: for循环里面遍历两个List或多个对象

for target in [1,2,3], [7,8,9]:
	print(target)

for target in [1,2,3],["wang",8,"dan"],'f*ck':
	print(target)

输出结果:

[1, 2, 3]
[7, 8, 9]
[1, 2, 3]
['wang', 8, 'dan']
f*ck

可见in后面当有多个对象的时候,会被组成一个tuple!!

每个target就是其中tuple中的一个元素哦。

4.list 和str类型的互相转换

4.1 str–>list
strl = '123456'
list1 = list(strl)
print('list直接转换', list1)

strl = '56 96爱 8'
list1 = list(strl)
print('list直接转换', list1)
# 看上面的转换结果,与预期有差别

str2 = 'JQK red    green'
list2 = str2.split()  # list2直接转换 ['123', 'tree', 'green']
print('list2直接转换', list2)

# 只有一个空格
list2 = str2.split(' ')
print('list2直接转换', list2)  # list2直接转换 ['123', 'tree', '', '', '', 'green']
# 看上面的转换结果,是有区别的,具体查看split()的定义
#看上面的转换结果,是有区别的,具体查看split()的定义

输出结果分别是:

list直接转换 ['1', '2', '3', '4', '5', '6']
list直接转换 ['5', '6', ' ', '9', '6', '爱', ' ', '8']
list2直接转换 ['JQK', 'red', 'green']
list2直接转换 ['JQK', 'red', '', '', '', 'green']

str3='www.baidu.com'
list3=str3.split('.')
print('list3直接转换',list3)    

输出结果是:

list3直接转换 ['www', 'baidu', 'com']
4.2 list–>str
tlist = ['1', '2', '3', '4']
str1 = str(tlist)
print('str的类型是:', type(str1))
print('直接使用str函数', str1)
# 从上面可以看出直接使用str转换,不可用
str2 = ''.join(tlist)
print('join转换str', str2)

str3 = '.'.join(tlist)
print('用.join转换str', str3)

str4 = ' '.join(tlist)
print('用空格join转换str', str4)

str5 = '\n'.join(tlist)
print('用换行join转换str:', str5, sep='\n')

输出结果分别是:

str的类型是: <class 'str'>
直接使用str函数 ['1', '2', '3', '4']
join转换str 1234.join转换str 1.2.3.4
用空格join转换str 1 2 3 4
用换行join转换str:
1
2
3
4

5.csv转excel

最简单的方法就是打开CSV然后另存为xlsx或者xls后缀即可。

为啥要写这个呢,在爬虫中分析完的数据想写入excel比csv要麻烦点(提取复杂的json数据,将需要的键值依次存入到Excel比较麻烦)。

ps:关于将复杂json存入到xlsx文件有更好方法大家也可以分享一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值