美文网首页视觉艺术
使用Python的scrapy框架进行爬虫(1)

使用Python的scrapy框架进行爬虫(1)

作者: __method__ | 来源:发表于2020-03-27 10:03 被阅读0次

    Python中的列表

    列表和C语言中的数组很像,但列表的功能更强大,可以存储不同类型的数据
    列表是Python中内置有序可变序列,列表的所有元素放在一对中括号“[]”中,并使用逗号分隔开;
    一个列表中的数据类型可以各不相同,可以同时分别为整数、实数、字符串等基本类型,甚至是列表、字典以及其他自定义类型的对象。

    weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
    print(weapon_list)
    # 访问其中的元素,使用索引的形式,索引是从零开始
    print(weapon_list[3])
    

    列表元素的增加append()
    向列表尾部追加一个元素,不改变其内存首地址,属于原地操作。
    例如:

    weapon_list = ['98k', 'M4A1', 'SCAR', 'AWM']
    print('列表添加前', weapon_list)
    weapon_list.append('MP5')
    print('列表添加后', weapon_list)
    

    列表添加后 ['98k', 'M4A1', 'SCAR', 'AWM', 'MP5']

    删除列表中的指定位置上的元素, 可以使用del关键字

    del weapon_list[0]
    print('列表删除后', weapon_list)
    

    测试列表中是否存在某元素 in

    print('AWM' in weapon_list)
    # True
    

    len()

    返回列表中的元素个数,同样适用于元组、字典、集合、字符串等

    print(len(weapon_list))
    
    

    遍历列表的三种方式

    a = ['a','b','c','d','e','f']
    for i in a:
        print(i)
    
    for i in range(len(a)):
        print(i,a[i])
    for i,ele in enumerate(a):
        print(i,ele)
    

    列表推导式

    列表推导式使用非常简洁的方式来快速生成满足特定需求的列表,代码具有非常强的可读性。

    语法形式:[表达式 for 变量 in 序列或迭代对象]

    列表推导式在逻辑上相当于一个循环,只是形式更加简洁。

    lis = [i for i in range(100)]
    print(lis)
    

    使用列表推导式实现嵌套列表的平铺

    >>> vec = [[1,2,3], [4,5,6], [7,8,9]]
    
    >>> [num for elem in vec for num in elem]
    
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    

    列表切片

    切片操作不是列表特有的,python中的有序序列都支持切片,如字符串,元组。

    切片的返回结果类型和切片对象类型一致,返回的是切片对象的子序列,如:对一个列表切片返回一个列表,字符串切片返回字符串。

      li=["A","B","C","D"]
    
    

    格式: li[start : end : step]

    start是切片起点索引,end是切片终点索引,但切片结果不包括终点索引的值。step是步长默认是1。

    t=li[0:3]        ["A","B","C"]        #起点的0索引可以省略,t=li[:3]
    
           t=li[2: ]        ["C","D"]           #省略end,则切到末尾
    
          t=li[1:3]        ["B","C"]
    
          t=li[0:4:2]       ["A","C"]       #从li[0]到li[3],设定步长为2。
    

    元组

    元组属于不可变序列(元素集合),一旦创建,用任何方法都不可以修改其元素。从形式上,元组的所有元素放在一对圆括号中,元素之间用逗号分隔。

    >>>x = (1,2,3)                               #直接把元组赋值给一个变量
    
    >>>x
    
    (1,2,3)
    

    元组与列表的区别

    • 元组中的数据一旦定义就不允许更改。
    • 元组没有append()、extend()和insert()等方法,无法向元组中添加元素。
    • 元组没有remove()或pop()方法,也无法对元组元素进行del操作,不能从元组中删除元素。
    • 从效果上看,tuple( )冻结列表,而list( )融化元组。

    元组的优点

    • 元组的速度比列表更快。
    • 元组对不需要改变的数据进行“写保护”将使得代码更加安全。
    • 元组可用作字典键(特别是包含字符串、数值和其它元组这样的不可变数据的元组)。元组有时还作为函数的返回值返回(返回多个值)

    字典

    字典定义

    字典(dictionary)是包含若干“键:值”元素的无序可变序列,字典中的每个元素包含“键”和“值”两部分,定义字典时,每个元素的键和值用冒号分隔,元素之间用逗号分隔,所有的元素放在一对大括号“{}”中。字典中的键可以为任意不可变数据,比如整数、实数、字符串、元组等等。
    字典的创建

    >>> a_dict = {'server': 'db.neuedu.com', 'database': 'mysql'}
    
    >>> a_dict
    
    {'database': 'mysql', 'server': 'db.neuedu.com'}
    
    >>> x = {}                     #空字典
    
    >>> x
    
    {}
    

    字典元素的读取

    以键作为下标可以读取字典元素,若键不存在则抛出异常

    aDict = {'name':'赵四', 'sex':'male', 'age':37}
    print(aDict['name'])
    

    字典元素的添加和修改

    当以指定键为下标为字典赋值时,若键存在,则可以修改该键的值;若不存在,则表示添加一个键、值对。

    aDict['addr'] = '象牙山'
    print(aDict)
    
    aDict['name'] = '谢广坤'
    print(aDict) # {'name': '谢广坤', 'sex': 'male', 'age': 37}
    

    字典删除

    • 使用del删除整个字典,或者字典中的指定元素
    • 使用pop()和popitem()方法弹出并删除指定元素
    • 使用clear()方法清空字典中所有元素
    del aDict['age']
    print(aDict)
    

    集合

    集合是无序可变序列,使用一对大括号界定,元素不可重复,同一个集合中每个元素都是唯一的。集合中只能包含数字、字符串、元组等不可变类型的数据,而不能包含列表、字典、集合等可变类型的数据。
    创建一个集合

    a = {3, 5}
    type(a)
    

    Python中的函数

    函数一词起源于数学,但是在编程中的函数和数学中的有很大不同。编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块。


    我们在学习过程中已经使用过一些python内建的函数,如print()。但我们也可以自己创建函数,这被叫做用户自定义函数。

    使用函数的好处

    • 避免代码的冗余
    • 让程序代码结构更加清晰
    • 让代码具有复用性,便于维护

    函数的定义格式

    image.png

    函数名的命名规则:

    函数名必须以下划线或字母开头,可以包含任意字母、数字或下划线的组合。不能使用任何的标点符号; 函数名是区分大小写的。 函数名不能是保留字




    递归函数

    斐波那契数列:

    • 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”
    • 指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
    • 在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果


    使用递归实现斐波那契数列:

    使用循环实现斐波那契数列:

    Python中的类

    面向对象最重要的概念就是类(class)和实例(instance),类是抽象的模板,比如学生这个抽象的事物,可以用一个Student类来表示。而实例是根据类创建出来的一个个具体的“对象”,每一个对象都从类中继承有相同的方法,但各自的数据可能不同

    以Student类为例,在Python中,定义类如下

    class Student(object):
        pass
    #(Object)表示该类从哪个类继承下来的,Object类是所有类都会继承类。
    

    实例:定义好了类,就可以通过Student类创建出Student的实例,创建实例是通过类名+()实现:

    student = Student()
    

    由于类起到模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法init方法,例如在Student类时,把name、score等属性绑上去:

    class Student(object):
        def __init__(self, name, score):
            self.name = name
            self.score = score
    

    这里注意:(1)、init方法的第一参数永远是self,表示创建的类实例本身,因此,在init方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。(2)、有了init方法,在创建实例的时候,就不能传入空的参数了,必须传入与init方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去

    lass Student(object):
        def __init__(self, name, score):
            self.name = name
            self.score = score
        def print_score(self):
            print("学生名字是{}, 分数是{}".format(self.name, self.score))
    
    
    stu = Student('赵四', 88)
    stu.print_score()
    

    相关文章

      网友评论

        本文标题:使用Python的scrapy框架进行爬虫(1)

        本文链接:https://www.haomeiwen.com/subject/xxokuhtx.html