Python爬虫学习笔记(一)

Python基础知识

Python学习爬虫相对来说灰常的简单,很容易上手,这篇文章中记录我一些学习中的一些收获以供自己复习,本文以唐松老师的《Python网络爬虫从入门到实践》为学习材料,

编写我的第一个爬虫

基础知识回顾

python基本知识与基本语句
  1. python通过缩进识别代码块,一般通过Tab键缩进,与C++和java中的{}相区别,语言所有类型都是对象。
  2. 基本结构。
    和其他高级语言没什么区别,三种基本结构
    顺序结构:
    无需多言。。。
    选择结构:
In [1]:
if 条件:
	语句块
else:
	语句块
In [2]:
if 条件:
	...
elif 条件:
	...
else:
	...

条件和else均后加了一个“:”,请注意。如果要跳过某个部分(即在这个部分什么也不做,那可以用pass跳过,相当于空语句)

循环结构

In [1]:
while 条件:  #条件为真时执行,除了标准的bool类型表示真假,python中0为false,
#1为true,空为false,例如"",[],{},(),None等,其中None其实并不是什么也没有
#他是实实在在的对象,起占位对象,后面可以用其他对象取代
	语句块

经过测试,None是false,而[None]就是true,可见[]中存在对象None之后就为真了,None并不是其表面意义上的“None”或者nothing的含义。
测试过程如上

for 个体 in 可迭代对象or序列:#for循环能在一个给定的序列中重复执行,不清楚
#具体怎么执行的,但感觉有点费内存呀
	...
	
  1. 基本变量类型

Python中变量都是对象,有一些内置的基本类型。

string类型。
string类型是‘’或者“”括起来的类型,一些基本运算如下:
+表示链接,*表示字符串重复,此外,字符串类还包括一系列函数,可自己进入string类中查看。
Number类型。
包括int,float,long int,和负数等类型,这里仅简要介绍一下类型的转换如:

float1=73.55
trans_int=int (float1)#将float类型转换成int类型

list类型。
[元素1,元素2,。。。]
类似数组,索引从0开始(事实上python中索引可能都是从0开始的),可以存储不同类型。属于可迭代对象。
tuple类型。
与list类型相似但是值不可变。
dic类型。
{Key:Value}
Key必须唯一,类型可以不同,但必须是不可变类型,如string,number,tuple等。
对字典的修改
增加键值对和修改键值对

di={'lianminhua':'shijianre',(1,2):1.0,1.2:[1,2,3]}
print(di['lianminhua'])#引用
di['lwh']='handsome'#添加新的键值对
print(di[1.2])
print(di)

删除键值对,可以单一删除,也可以情况字典,也可以删除字典。

del di['lwh']#删除Key为lwh的键值对
print(di)
di.clear()#清空字典
print(di)
del di#删除字典
print(di)#error

注,字典中的元素无序,但是字典属于可迭代对象。可迭代对象包括
关系图
具体知识见Python可迭代对象详解

set类型。
用set()或{}产生,注意空集时不能用{}而用set,因为{}返回的是一个空字典。集合与数学中的集合相似,可以进行集合运算,交差并补等,满足集合的无序性,不可重复性等。属于可迭代对象。

set加入元素,add与update的区别
集合添加元素有add和update两个内置函数,两个函数的作用各有不同。add函数只能将某个元素当作一个整体加入,即加入一个元素,需要加入的元素是hashable,可hash的?,根据测试来看可迭代对象除string外均不可以当作参数传入。update想法,他需要传入可迭代对象,将其个体一个个加入set中否则也会报错,在不确定传入的是否是可迭代类型还是一个单一的个体时,需要灵活处理,入加入list中再一并传入。下面的问题我还没有解决,想要知道有没有什么简单的办法可以解决,同样我也看出,python中同一变量中类型不不同的个体可能还会引起编程上的麻烦。

di={'lianminhua':'shijianre',(1,2):1.0,1.2:[1,2,3]}
print(di['lianminhua'])#引用
di['lwh']='handsome'#添加新的键值对
print(di[1.2])
print(di)
del di['lwh']#删除Key为lwh的键值对
print(di)
# di.clear()#清空字典
# print(di)
# del di#删除字典
S=set()
y=[]
for K in di:
    print(di[K])
    #y.extend(di[K])#构造中间变量,加入Value中的每个单个的值,出错,float类型是不可迭代对象,意识到python中同一变量中类型不一致
    #可能还会引起编程上的麻烦
    y=y.append(di[K])#将value做整体加入,报错
print(y)
S.update(di[K])#此处不能用add函数添加,因为add只加入元素,对list,tuple等会报错,update也可做添加,参数类型多样
print(S)
for s in S:
    print(s)

想了一下,可以通过加括号的方式结合list的extend方法加入到list中,这是一种看操作上较为但需要技巧的方法,但最后还是报错,指的是传入的参数不是可hash类型,我估计不是逻辑上的错误,而是python中set元素的类型是有限制的应该是单一的元素,hashable的具体代码和错误信息如下

di={'lianminhua':'shijianre',(1,2):1.0,1.2:[1,2,3]}
print(di['lianminhua'])#引用
di['lwh']='handsome'#添加新的键值对
print(di[1.2])
print(di)
del di['lwh']#删除Key为lwh的键值对
print(di)
# di.clear()#清空字典
# print(di)
# del di#删除字典
S=set()
y=[]
for K in di:
    print(di[K])
    #y.extend(di[K])#构造中间变量,加入Value中的每个单个的值,出错,float类型是不可迭代对象,意识到python中同一变量中类型不一致
    #可能还会引起编程上的麻烦
    #y=y.extend([di[K]])#将value做整体加入,报错,不能用等于,函数返回值为None
    y.extend([di[K]])
print(y)
S.update(y)#此处不能用add函数添加,因为add只加入元素,对list,tuple等会报错,update也可做添加,参数类型多样
print(S)
for s in S:
    print(s)

错误信息
set类型错误信息
查阅可知,set类型和dic类型中的Key类型要求相似,需要是不可变对象,而且速度很快。和我预测的不一致,其原子元素也可以是可迭代类型,如我加入如下点集。
set元素类型探讨
时间有限,我就不再考虑将我上面出错的代码找到解决方案了,希望有大佬翻拍,帮我解决上面的问题,怎么样优雅的将给定的字典中的value值加入到集合中,包括将每一个value值作为一个整体加入到set中作为set中的原子元素,或者将value中的可迭代的对象分离出来,将其一个个的加入到集合中
迭代器和生产器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

字符串,列表或元组对象都可用于创建迭代器:

函数
功能和好处自不必说。传参方式,类似于c++中引用与值传递类似,分为可变传递与不可变传递,具体说明如下:
不可变传递有number,string,和tuple等类型
可变传递有list,dic等。
此外,传参还有

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值