自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

偷得浮生半日闲

python爬虫

  • 博客(116)
  • 收藏
  • 关注

原创 【爬虫小白】scrapy设置User-Agent小技巧

我们在scrapy项目中,修改请求时的User-Agent可以有两种方法:一种时修改settings里面的USER-AGENT变量;第二种是通过Downloader Middleware的proscss_request()方法来修改。第一种方法非常简单,我们只需要在setting.py里面加USER-AGENT的定义即可:USER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML,

2021-03-09 11:43:54 1733

原创 【爬虫小白】各种请求使用代理的方法

一下以快代理的代理的使用方法作为例子requests设置代理import requestsproxy = '127.0.0.1:7777'proxies={ 'http:http://'+proxy, 'https:https://'+proxy}try: response=requests.get('https://baidu.com',proxies=proxies) print(response.text)except requests.excep

2021-03-01 15:55:42 415

原创 异步采集实现

直接上代码,有不懂留言import asyncioimport aiohttpimport json, timeINDEX_URL = 'https://dynamic5.scrape.center/api/book/?limit=18&offset={offset}'DETAIL_URL = 'https://dynamic5.scrape.center/api/book/{id}'PAGE_SIZE = 18PAGE_NUMBER = 5 # 爬取页码数量CONCURRE

2021-02-26 16:49:12 361

原创 【爬虫小白】aiohttp异步爬取简单使用

了解aiohttp aiohttp是一个基于asyncio的异步http网络模块,它既提供了服务端,有提供了客户端。其中我们可以用服务端搭建一个支持异步处理的服务器,用于处理请求并返回响应,类似于Django、Flask等一些Web服务器,而客户端我们就可以用来发起请求,就类似于requests来发起一个http请求然后获得响应,但requests发起的是同步网络请求,而aiohttp则发起的是异步的。我们先了解一下aiohttp客户端部分使用。基本使用基本实例我们先看一个...

2021-02-26 16:45:10 1740 1

原创 【爬虫小白】异步爬虫原理和解析

异步基础概念在了解异步协程之前,先得了解一些基础概念,如堵塞和非堵塞、同步和异步、多进程和协程。阻塞阻塞状态指程序未得到所需计算资源被挂起的状态。程序在等待某个操作完成期间,自身无法继续处理其它的事情,则称该程序在该操作上是阻塞的。常见的阻塞形式有:网络I/O阻塞、磁盘I/O阻塞、用户输入阻塞等。阻塞是无处不在的,包括CPU切换上下文时,所有的进程都无法真正处理事情,它们也会被阻塞。如果是多核CPU则正在执行上下文切换操作的核不可被利用。非阻塞程序在等待某操作过程中,自身不被阻塞,可

2021-02-24 11:20:10 606

原创 【Python】爬虫入门首选,Request库的基本使用

安装pip install requests请求GET请求【示例】如下:import requestsr=requests.get('http://baidu.com')print(r.text)get请求携带参数【示例】如下:#方式一url="http://httpbin.org/get?name=germey&age=25"#参数是name=germey 和age=25#可以直接请求import requestsreq =reqquest

2020-12-31 11:26:09 187

原创 【Python】理解多进程基本原理

多进程的含义进程(Process)是具有一定独立功能的程序关于某给数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。多进程就是启用多个进程同时运行,由于进程是线程的集合,而且进程是由一个或多个线程构成,所以多进程的运行意味着有大于或等于进程数量的线程在运行。Python多进程的优势根据这节线程基本原理了解到,由于进程中GIL的存在,Python中的多线程并不能很好地发挥多核优势,一个进程中的多线程,在同一时刻只能有一个线程运行。对于多进程来说,每一个进程都有属于自己的GI

2020-12-30 15:22:47 587

原创 【Python】理解多线程基本原理

目录多线程的含义并行和并发Python实现多线程创建子线程方法一创建子线程方法二守护线程互斥锁多线程的含义线程是操作系统进行运算调度的最小单位,是进程中的一个最小运行单元。多线程就是一个进程中同时执行多个线程,比如,打开一个浏览器,是一个进程,浏览器里面打开多个页面,有的页面打开音乐,有的打开视频,它们可以同时运行,互不干扰,这就是多线程在工作。并行和并发并发并发,是指同一时刻只能有一条指令执行,但是多个线程的对应的指令被快速轮换地执行。比如说一个处.

2020-11-24 15:43:38 294 1

原创 python-模块搜索路径(重要)

当我们导入某给模块文件时,python解释器去哪里找这个文件,只有找到这个文件才能读取、装载运行该模块文件,一般按照如下路径寻找模块文件(按照顺序寻找,找到即停不继续往下找)内置模块 当前目录 程序的主目录 pythonpath目录(如果已经设置,pythonpath环境变量(windows设置的系统变量)) 标准链接库目录 第三方目录(site-packages目录) .pth文件的内容(如果存在的话) sys.path.append()临时添加目录当任何一个pytho...

2020-11-06 17:33:10 209

原创 【python】异常的处理以及traceback的异常处理

异常机制的本质 异常指程序运行过程中出现的非正常现象,例如用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等等。 所谓异常处理,就是指程序在出现问题时依然可以正确的执行剩余的程序,而不会因为异常而终止程序执行。 python中,引进了很多用来描述和处理异常的类,称为异常类,异常类定义中包含类该类异常的信息和对异常进行处理的方法,下面叫为完整的展示了python中内建异常类的继承层次:BaseException(所有异常的父类) Keyboa...

2020-11-04 18:39:11 1143

原创 【python】理解递归算法的用法

递归是一种常见的解决问题的方法,即把问题逐渐简单化,递归的基本思想就是“自己调用自己”,一个使用递归技术的方法将会直接或间接的调用自己。 利用递归可以用简单的程序来解决一些复杂的问题,比如:斐波那契数列的计数、汉诺塔、快排等等问题。递归结构包括两个部分:定义递归头:什么时候不调用自身方法,如果没有头,将会陷入死循环,也就是递归的结束条件。 递归体:什么时候需要调用自身方法。【示例】#测试递归num=1def fact(): global num ...

2020-11-04 15:24:23 215

原创 python--shutil模块(拷贝和压缩)

shutil模块是python标准库中提供的,主要用来做文件和文件夹的拷贝、移动、删除等,还可以做文件和文件夹的压缩、解压缩操作。 os模块提供了对目录或文件的一般操作,shutil模块作为补充,提供了移动、肤质、压缩、解压等操作,这些都是os模块没有提供的。【操作-示例拷贝】#测试shutil模块的用法:拷贝import shutil#简单拷贝文件shutil.copyfile(‘1.txt’,‘1_copy.txt') #1.txt是原文件,1_co...

2020-11-04 11:16:31 303 1

原创 python-os模块的操作使用

os模块可以帮我们直接对操作系统进行操作,可以直接调用操作系统的可执行文件、命令,直接操作文件、目录等,是系统运维的核心基础。os调用操作系统文件和命令os.system可以帮我们直接调用系统的命令【示例】os.system调用windows系统的记事本程序import osos.system("notepad.exe")os.system("cmd") #可以直接打开Windows的cmd【示例】os.system调用ping命令import osos.system("

2020-11-03 17:49:33 380

原创 【python-文本系列】CSV文件的操作

csv文件的操作csv(Comma Soperated Values)是逗号分隔符文本格式,常用于数据交换、Excel文本和数据库数据的导入和导出。与Excel文件不同,cav文件中:值没有类型,所有值都是字符串 不能指定字体颜色样式 不能指定单元格的宽高,不能合并单元格 没有多个工作表 不能嵌入图像图表python标准库的模块csv提供了读取和写入csv格式文件的对象。我们在Excel中建立一个简单的格式:另存为“csv(逗号隔开),我们打开查看这个csv文件内容:姓名

2020-11-02 15:56:10 1037

原创 python-使用pickle序列化

pickle序列化 python中,一切皆对象,对象本质上就是一个“存储数据的内存块”,有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他计算机上,这时候,就需要“对象的序列化和反序列化”,对象的序列化机制广泛的应用在分布式、并行行系统上。 序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。 可以使用pickle模块中的函数,实现序列化和反序列化操作。...

2020-11-02 15:10:47 211

原创 【python-文本系列】文本文件的读取以及常用方法的总结

文件的读取一般使用以下三个方法:1.read([size]) 从文件中读取size个字符,并作为结果返回。如果没有size参数,则读取整个文件。读取到文件末尾,会返回空字符串。2.readline() 读取一行内容作为结果返回,读取到文件末尾,会返回空字符串。3.readlines() 文本文件中,每一行作为一个字符串存入列表中,返回该列表【操作例子】读取一个文件前4个字符with open(r'bb.txt','r',encodi...

2020-10-30 15:39:36 900

原创 爬虫系列-掌握HTTP基本原理(重要)

目录首先需要了解URL和URI的区别URI和URL超文本协议HTTP和HTTPSHTTPHTTPSHTTP请求过程请求基础认识请求请求方法请求头请求体响应响应头响应体首先需要了解URL和URI的区别URI和URLURL(Universal Resource Locator)即统一资源定位符URI(Uniform Resource Identifier)即统一资源标志符号例如:https://github.com/fac.

2020-10-28 16:51:54 410

原创 【python-文本系列】常用编码介绍(番外---文件编码问题)

常用编码介绍 在操作文本文件时,经常会操作中文,这时就会经常碰到乱码问题: 常用的编码之间的关系如下:ASCII编码 全称为 American Standard Code Information Interchange,美国信息交换标准代码,这时世界上最早最通用的单字节编码系统,主要用来显示现代英语以及其他西欧语言。 ASCII码用7位表示,只能表示128个字符,只定义了2^7=128个字符,用7bit即可...

2020-10-26 16:54:51 153

原创 【python-文本系列】文件操作(IO技术)

目录概率文件分为两类(文本文件和二进制文件)文件操作相关模块概述创建文件对象open()文件的写入概率 一个完整的程序一般都包括数据的存储和读取,我们在练习时所写的程序数据都没有进行实际存储,因此,Python解释器执行完数据就消失了,实际开发中,我们经常需要从外部存储介质(硬盘,光盘,U盘、数据库中等等)读取数据,或者将程序产生的数据存储到文件中,实现“持久化”保存。 很多软件系统是将数据存储到数据库中,数据库实际也是基于文件形式存储的。...

2020-10-22 17:19:44 151

原创 Python的设计模型-----工厂模式和单例模式

设计模式是面向对象语言特有的内容,使我们在面临某一类问题时固定的做法,设计模式有很多种,比较流行的是:GOF(Goup Of Four)23种设计模式。我们没有必要全学,学习几个常用的的即可 我们最常用的模式:工厂模式和单例模式(只要在复杂的场景在会使用)工厂模式 工厂模式实现了创建者和调用者的分离,使用专门的工厂类将选择实现类、创建对象进行统一的管理和控制。 【例子】# 工厂模式'''一般情况下我们要创建一个工厂类(创造我们想创造...

2020-10-16 16:19:35 551 2

原创 Python关于另一种类继承是组合(番外----组合)

组合 “is-a”关系我们可以使用“继承”,从而实现子类拥有父类的方法和属性。“is-a”关系指的是类似这样的关系:狗是动物。狗类就应该继承动物类 “has-a”关系,可以使用“组合”也能实现一个类拥有另一个类的方法和属性。“has-a”关系指的是这样的关系:手机拥有cpu。【例子】# 继承class A1: def say_a1(self): print('这是大写A')class B1(A1): passb...

2020-10-14 18:38:30 86

原创 Python对象的浅拷贝和深拷贝(番外---对象拷贝)

对象的浅拷贝和深拷贝变量的赋值操作 只是形成两个变量,实际还是指向同一个对象浅拷贝 Python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象和拷贝对象会引用同一个子对象。深拷贝 使用copy模块的deepcopy函数,递归拷贝对象中包含的字对象,源对象和拷贝对象所有的子对象也不同。【例子】# 测试对象的浅拷贝、深拷贝import copyclass MobilePho...

2020-10-14 16:41:14 205 3

原创 Python特殊属性(番外--查看类对象属性的方法)

特殊属性Python对象中包含了很多下划线开始和结束的属性,这些都是特殊属性,有特殊用法,这里列出常见的特殊属性: 特殊方法 含义 obj代表是普通对象 obj.__dict__ 对象的属性字典 obj.__class__ 对象所属的类 class对象方法 class.__bases__ 类的基类元组(多继承) class.__base__ 类的基类 class.__mro__ 类层次结构 class.__subclas.

2020-10-13 17:21:18 166

原创 python特殊方法和运算符重载(番外--重载)

python的运算符实际上是通过对象的特殊方法实现的【例如】a=20b=30c=a+bd=a.__add__(b)print("c=",c)print("d=",d)执行返回 c= 50 d= 50常见的特殊方法统计说明方法 说明 例子 __init__ 构造方法 对象创建:p=Person() __del__ 析构方法 对象回收 __repr__,__str__ 打印,转换 print(a...

2020-10-13 11:04:49 249

原创 python面向对象三大特征(封装,继承,多态)

python是面向对象的语言,也支持面向对象编程的三大特性:继承、封装、多态。*封装(隐藏) 隐藏对象的属性和实现细节,只对外提供必要的方法,相当于将“细节封装起来”,只对外暴露“相关调用方法”。 通过“私有属性,私有方法“的方式,实现”封装”,python追求简洁的语法,没有严格的语法级别的“访问控制符”。*继承 继承可以让子类具有父类的特性,提高代码的重用性。 从设计上是一种增量进化,原有父类设计不变的情况下,可以增加新...

2020-10-10 11:20:42 228 1

原创 python查看类的继承层次结构以及object根类

通过类的方法mro()或者类的属性__mro__可以输出这个类的继承层次结构【操作】查看类的继承层次结构class a(): passclass b(a): passclass c(b): passif __name__ == '__main__': print(c.mro())执行反回:[<class '__main__.c'>, <class '__main__.b'>, <class '__main__.a'&

2020-10-09 16:38:44 1506 1

原创 python 关于私有属性和私有方法

私有属性和私有方法 python对于类的成员没有严格的访问控制限制,这与其他面向对象语言有区别,关于私有属性和私有方法,有如下要点: 1.通常我们约定,两个下划线开头的属性是私有的(private),其他为公共的(public)。 2.类内部可以访问私有属性(方法) 3.类外部不能直接访问私有属性(方法) 4.类外部可以通过“_类名__私有属性(方法)名“访问私有属性(方法)【注】:方法本质上也是属性!只不过是可以通过()执行而已,所...

2020-09-25 16:38:44 257

原创 python方法没有重载以及方法的动态性

__call__方法和可调用对象 定义了__call__方法的对象,称为“可调用对象”,即该对象可以像函数一样被调用方法没有重载 在其他语言中,可以定义多个重名的方法,只要保证方法签名唯一即可,方法签名包含3个部分:方法名,参数数量,参数类型。 python中,方法的参数没有类型(调用时确定参数的类型),参数的数量也可以由可变参数控制,因此,python中没有方法的重载的,定义一个方法即可由多种调用方式,相当于实现了其他语言中的方法重载。 ...

2020-09-25 16:14:40 129

原创 python的__del__方法和垃圾回收机制

__del__方法(析构函数)和垃圾回收机制 __del__方法称为“析构方法”,用于实现对象被销毁时所需的操作,比如:释放对象占用的资源,例如:打开的文件资源、网络连接等。 python实现自动的垃圾回收机制。当对像没有被引用时(引用计数为0),由垃圾回收器调用__del__方法。 也可以通过del语句删除对象,从而保证调用__del__方法。 系统会自动提供__del__方法,一般不需要自定义析构方法。例子:class Perso...

2020-09-08 11:21:01 441

原创 python的类属性和类方法以及静态方法的含义

类属性:类属性是从属于“类对象”的属性,也称为“类变量”,由于,类属性从属于类对象,可以被所有实例对象共享。类属性的定义方式:class stu:#类名 类变量名=初始值在类中或者类的外面,可以通过:“类名.类变量名“来读写。类方法:类方法是从属于“类对象”的方法,类方法通过装饰器@classmethod来定义的,格式如下:@classmethoddef 类方法名(cls,[,形参列表]): 函数体要点如下:@classmethod必须位于方法上面一

2020-09-07 22:45:30 398

原创 Python实例属性和实例方法

实例属性实例属性是从属于实例对象的属性,也称为“实例变量”,使用有如下几个要点:1.实例属性一般在__init__()方法中通过如下代码定义: self.实例属性名 = 初始值2.在本类的其他实例方法中,也是通过self进行访问: self.实例属性名3.创建实例对象后,通过实例对象访问: obj01=类名() #创建对象,调用__init__()初始化属性 obj...

2020-08-24 16:40:59 697

原创 scrapy项目下多个爬虫如何同时运行?

一般运行scrapy爬虫文件,我们只需要这样输入:scrapy crawl xxx假设我们有两个爬虫文件为:one和two,想同时运行着这两问题。如果我这样:from scrapy.cmdline import executeexecute(['scrapy','crawl','one')execute(['scrapy','crawl','two')这样的运行的效果,是串行执行,只有第一个one执行完以后,第二个two才会执行。。这显然不是我们所需要的。真正同时运行的方法

2020-08-07 14:55:47 1602 3

原创 Python构造函数__init__()

类是抽象的,也称为“对象模板”,我们需要通过类这个模板,创建类的实例对象,才能使用类定义的功能。Python对象基本包含三个部分:id(identity 识别码),type(对象类型),value(对象的值)现在,更进一步的理解,一个Python对象包含如下部分id(identity 识别码) type(对象类型) value(对象的值) 1.属性(attribute) 2.方法(method)创建对象,需要定义构造函数__init__()方法,构造方法用于执行...

2020-07-24 15:42:40 766

原创 Python面向对象和面向过程的区别以及设计和执行者的思维

面向对象编程: 面向对象编程的思想主要是针对大型软件设计而来的,面向对象编程使程序的扩展性更强,可读性更好,使得编程可以像搭积木一样简单。 面向对象编程将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。 Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承,多态,封装等。 Python中,一切皆对象,在 Python基础(一)介绍的数据类型、...

2020-07-22 21:21:50 235

原创 Python的eval()函数

功能:将字符串str当成有效的表达式来求值并返回计算结果语法:eval(source[.globals,locals]]) -->value参数: source:一个Python表达式或函数compile()返回的代码对象 global:可选,必须是dictionary locals:可选,任意映射对象#测试eval()函数eval("print('abcd')") #字符串是可变的,还原Python代码#打印出来>&...

2020-06-07 16:18:21 241

原创 Python函数lambda表达式和匿名函数

lambda表达式和匿名函数lambda表达式可以用来声明匿名函数。lambda函数是一种简单的、在同一行定义函数的方法,lambda函数实际生成一个函数对象。lambda表达式只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。lambda表达式的基本语法如下:lambda org1,org2,org3...:<表达式>org1/org2/org3/为函数的参数,<表达式>相当于函数体,运算结果是:表达式的运算结果。例子(lambd

2020-06-07 16:01:41 413

原创 Python函数参数的几种类型

位置参数函数调用时,实参默认按照位置顺序传递,需要个数的和形参匹配,按位置传递 的参数,称为:“位置参数”。例子:def one(a,b,c): print(a,b,c)one(1,2,3)one(1,2) #这里报错,位置参数不匹配返回值:>>>Traceback (most recent call last): 1 2 3 File "D:/B_project/Kong_Ji/git_data/z_Script/gove....

2020-06-07 15:51:11 2570

原创 Python浅拷贝和深拷贝以及内存分析

浅拷贝和深拷贝深入了解参数传递的底层原理,需要理解一下“浅拷贝和深拷贝”,拷贝的内置函数为:copy(浅拷贝)、deepcopy(深拷贝)浅拷贝:不拷贝子对象的内容,只是拷贝子对象的引用。深拷贝:会连子对象的内存也全部拷贝一份,对子对象的修改不会影响源对象例子:import copydef testcopy(): '''测试浅拷贝''' a=[11,22,[33,44]] b=copy.copy(a) print("a",a) pr

2020-06-03 21:21:31 524

原创 Python函数参数的传递可变对象及不可变对象

参数的传递函数的参数传递本质上就是:从实参到形参的赋值操作。Python中“一切皆对象”,所有的赋值操作皆是“引用赋值”,所以,Python中参数的传递都是“引用传递”,不是“值传递”,具体操作可分为两类:对“可变对象”进行“写操作”,直接作用于原对象本身。 对“不可变对象”进行“写操作”,会产生一个新的“对象空间”,并用新的值填充这块空间(起到其他语言的“值传递”效果,但不是“值传递”)。可变对象有: 字典、列表、集合、自定义的对象等不可变对象有: 数字、字...

2020-06-03 20:31:52 2768

原创 Python局部变量与全局变量效率的测试

局部变量的查询和访问速度比全局变量快,优先考虑,尤其是在循环的时候。在特别强调效率的地方或者循环次数较多的地方,可以通过将全局变量转为局部变量提高运行速度。例子:import math, timedef one(): start_time = time.time() for i in range(10000000): math.sqrt(30) end = time.time() print(end - start_time)def

2020-06-01 20:30:49 772

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除