03 2019 档案

摘要:建立好项目以后,在项目文件内scrapy会搭好框架,我们只需要按照框架设置. 先定义Item 它是保存爬取到的数据的容器,其使用方法和python的字典类似,并且提供了额外保护机制来避免拼写错误导致的未定义字段错误. 然后编写爬虫类spider, spider是用户编写用于从网站上爬取数据的类.其包 阅读全文

posted @ 2019-03-08 21:46 心酒 阅读(172) 评论(0) 推荐(0)

摘要:创建项目时报错ModuleNotFoundError: No module named 'cryptography.hazmat.bindings._constant_time' pip install -I cryptography 使用这个命令就搞定了 阅读全文

posted @ 2019-03-08 14:16 心酒 阅读(461) 评论(0) 推荐(0)

摘要:使用Python自带的PIP安装Scrapy需要的支持包太多了,很麻烦. 使用了Anaconda直接 conda install Scrapy.出了一堆问题 anaconda安装scrapy,使用 conda install scrapy 命令。安装完成后在命令行执行scrapy提示报错,如图: W 阅读全文

posted @ 2019-03-08 14:15 心酒 阅读(259) 评论(0) 推荐(0)

摘要:爬虫一般在网页Post里找数据,注意大部分网页都已经反爬,会出现主要对象加密的问题,比如百度翻译就影藏了输入的内容,有道翻译进行了MD5加密,不过广大网友是给力,只要把网址里的_o去掉就又可以了 参考小甲鱼的实例,我试着爬了下百度贴吧的图片,还挺方便. import urllib.requestim 阅读全文

posted @ 2019-03-08 13:35 心酒 阅读(249) 评论(0) 推荐(0)

摘要:举个例子: 现在很多网站都搞REST API,比如新浪微博、豆瓣啥的,调用API的URL类似: http://api.server/user/friends http://api.server/user/timeline/list 如果要写SDK,给每个URL对应的API都写一个方法,那得累死,而且 阅读全文

posted @ 2019-03-05 22:43 心酒 阅读(218) 评论(0) 推荐(0)

摘要:__getitem__ 实例虽然能作用于for循环,看起来和list有点像,但是,把它当成list来使用还是不行,要表现得像list那样按照下标取出元素,需要实现__getitem__()方法 __getattr__ 正常情况下,当我们调用类的方法或属性时,如果不存在,就会报错。要避免这个错误,除了 阅读全文

posted @ 2019-03-05 22:40 心酒 阅读(175) 评论(0) 推荐(0)

摘要:__slots__ 为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性. __str__ 用这个命令定义方法,可以返回想要的字符串,但是容易看到实例内部重要的数据, 直接显示变量调用的不是__str__(),而是__r 阅读全文

posted @ 2019-03-05 22:09 心酒 阅读(235) 评论(0) 推荐(0)

摘要:在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性。 先定义 阅读全文

posted @ 2019-03-05 15:48 心酒 阅读(206) 评论(0) 推荐(0)

摘要:对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。 isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上。 并且还可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是list或 阅读全文

posted @ 2019-03-05 15:39 心酒 阅读(143) 评论(0) 推荐(0)

摘要:在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class) 当子类和父类都存在相同的run()方法时,我们说,子类的run()覆盖了父类的ru 阅读全文

posted @ 2019-03-05 14:41 心酒 阅读(47) 评论(0) 推荐(0)

摘要:注意到__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。 有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要 阅读全文

posted @ 2019-03-05 14:30 心酒 阅读(146) 评论(0) 推荐(0)

只有注册用户登录后才能阅读该文。

posted @ 2019-03-05 13:59 心酒 阅读(1) 评论(0) 推荐(0)

摘要:当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单 阅读全文

posted @ 2019-03-03 21:02 心酒 阅读(130) 评论(0) 推荐(0)

摘要:生成器generator 要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator. 如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator. 阅读全文

posted @ 2019-03-03 18:43 心酒 阅读(143) 评论(0) 推荐(0)

摘要:如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。 默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, 阅读全文

posted @ 2019-03-03 15:52 心酒 阅读(142) 评论(0) 推荐(0)

摘要:恢复内容开始 定义默认参数要牢记一点:默认参数必须指向不变对象! 可变参数 定义函数的时候 ()内可定义是可变参数 *参数 已经有一个list或者tuple,要调用一个可变参数怎么办?Python允许你在list或tuple前面加一个*号,把list或tuple的元素变成可变参数传进去 例如 关键字 阅读全文

posted @ 2019-03-03 14:48 心酒 阅读(166) 评论(0) 推荐(0)

摘要:条件语句,循环语句最后必须加":" 切记切记 (经常忘记) 阅读全文

posted @ 2019-03-03 11:00 心酒 阅读(122) 评论(0) 推荐(0)

摘要:列表 用索引来访问list中每一个位置的元素,记得索引是从0开始的,不要越界 增加元素用 列表名.append() 插入元素用 列表名.insert(位置,元素) 这个insert和SQL是同一单词 删除末尾的元素用 pop() 删除指定位置的元素 pop(位置) 要把某个元素替换成别的元素,可以直 阅读全文

posted @ 2019-03-03 10:43 心酒 阅读(123) 评论(0) 推荐(0)

摘要:字符串和编码需要注意的地方 其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数, 用%%来表示一个% 当str和bytes互相转换时,需要指定编码。最常用的编码是UTF-8 阅读全文

posted @ 2019-03-03 10:26 心酒 阅读(171) 评论(0) 推荐(0)

摘要:decorator装饰器 阅读全文

posted @ 2019-03-03 00:30 心酒 阅读(157) 评论(0) 推荐(0)

摘要:python中返回函数 例如,定义一个函数 f(),我们让它返回一个函数 g,可以这样写: def calc_prod(lst): def calc_iter(): def f(x,y): return x*y return reduce(f,lst) return calc_iter f = ca 阅读全文

posted @ 2019-03-02 22:45 心酒 阅读(226) 评论(0) 推荐(0)

摘要:闭包是指内层函数引用了外层函数的变量(参数也算变量),然后返回内层函数的情况,称为闭包(Closure)。 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。 def count(): fs = [] for i in range(1, 阅读全文

posted @ 2019-03-02 22:30 心酒 阅读(166) 评论(0) 推荐(0)

摘要:map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。 假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名 阅读全文

posted @ 2019-03-02 21:17 心酒 阅读(153) 评论(0) 推荐(0)

摘要:try: 检测范围 #代码 except 错误代码 as reason: print('文件出错了,原因是:' + str(reason)) finally: 这个命令可以在出错后依旧执行可以运行的代码 异常处理语句 try: 可以接else和with 阅读全文

posted @ 2019-03-02 13:50 心酒 阅读(116) 评论(0) 推荐(0)

摘要:用import+模块名 调用 os.path模块 用于文件所在路径的修改模块 os模块 文件对象方法 阅读全文

posted @ 2019-03-01 21:40 心酒 阅读(134) 评论(0) 推荐(0)

摘要:集合也是用{ },集合里不可能出现重复的元素,也没有一定顺序 set() 创建一个集合,注意如果用set重置一个序列,它会改变序列的元素的顺序 add() 增加一个元素 remove() 删除一个元素 frozenset() 此命令是创建一个无法更改的集合 阅读全文

posted @ 2019-03-01 20:26 心酒 阅读(145) 评论(0) 推荐(0)

摘要:创建和访问字典 字典是用{key:value} 属于映射类型 例子 dicti1={'李宁':'一切皆有可能','耐克':'JUST DO IT'} 品牌是key 口号是值 访问字典的命令 dicti fromkeys() 可以赋予字典内所有 key的值,但不能改动已有的值 key() 取出字典内的 阅读全文

posted @ 2019-03-01 15:23 心酒 阅读(234) 评论(0) 推荐(0)

摘要:递归 满足递归的2个条件:定义函数时,调用自己. 要有一个正确的停止条件. 出来混一定要还才是递归. 例子: def factorial(n):if n==1:return 1else:return n*factorial(n-1)number=int(input('请输入一个正整数:'))resu 阅读全文

posted @ 2019-03-01 13:45 心酒 阅读(351) 评论(0) 推荐(0)

摘要:匿名函数lambda, 作用是不用定义函数,用完之后会自动被删掉,在使用执行脚本的时候,使用lambda就可以省下定义函数的过程,简化代码的可读性. 格式是 例子g=lambda x,y:x+y g(3,4) 7 过滤函数 filter filter(function or none,iterabl 阅读全文

posted @ 2019-03-01 13:44 心酒 阅读(311) 评论(0) 推荐(0)