【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作

目录

  • 第一章 字符串和正则表达式
    • 第一节 字符串有关知识
    • 第二节 正则表达式
      • (一)单个字符匹配
      • (二)匹配多个字符
      • (三)转义、或字符
      • (四)python高级正则
    • 第三节 http https有关知识
      • (一)http和https概况
      • (二)http请求方法
      • (三)请求头和响应头
      • (四)抓包工具
    • 第四节 多任务操作
      • (一)多任务概述
      • (二)线程操作
      • (三) 进程操作
      • (四)协程操作
  • 第二章 爬虫基本知识
    • 第一节 爬虫的基本概念
    • 第二节urllib库操作
    • 第三节 proxyhandler处理器
    • 第四节 cookie基本操作
    • 第五节 错误处理
  • 第三章 其他爬虫库操作
    • 第一节 requests库操作
      • (一)requests库的安装
      • (二)requests库get方法
      • (三)requests库post方法
      • (四)requests库代理使用
      • (五)requests库cookie使用
      • (六)requests库cookie使用
      • (六) 处理不信任证书

第一章 字符串和正则表达式

第一节 字符串有关知识

  1. 字符串类型:str类型:unicode的呈现类型;bytes类型:互联网数据都是二进制方式传输的;
  2. 字符集概念:ascii、gb2312、gb18030,unicode主要分别对应(英语、汉语、繁体);
  3. 字符集特点:上述字符集都是定长字符集,ascii为1个字节,unicode2个字节;
  4. utf-8字符集:unicode实现方式之一,为变长编码,基本消灭各自为战的字符集形势;
  5. str和bytes转换:encode()是str类型转bytes类型;decode()是bytes转str;
  6. decode参数:decode(“utf-8”)、decode(“utf8”)、decode(“UTF_8”)皆可;
  7. 注意事项:编解码必须一一对应;有些中文是gbk编码类型,要注意;

第二节 正则表达式

概述:re内置模块,match方法,参数:正则,字符串;返回值的group方法提取;

(一)单个字符匹配

  1. 数字:"\d"等价1位数字;[123456]等价1-6;[1-6],[1-356-9],代表连续不连续;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第1张图片
  2. 数字、字母:[1-8a-zA-Z]【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第2张图片

(二)匹配多个字符

1.多个字符【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第3张图片
2. 符号?的应用场景,比如电话号码的“-”,
3. re.S参数思考,“”“jgjgjg”“”,可以换行,内容可打印;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第4张图片4. 匹配开头结尾:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第5张图片
5. 实例:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第6张图片

(三)转义、或字符

  1. 分组和转义字符【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第7张图片

  2. 转义字符\:如果email当中的"."、"?“等与正则冲突的字符,”"反斜杠充当转义字符;

    例如:re.match(r"[a-zA-Z0-9_]{4,20}@163.com$",email)

  3. 或字符|:re.match(r"[a-zA-Z0-9_]{4,20}@(163|126).com$",email)

  4. 分组():[在这里插入图片描述在这里插入图片描述

(四)python高级正则

  1. search方法:只找一次;随意位置匹配 ret=re.search(r"\d+“,“阅读次数为9999”);ret.group();

  2. findall方法:弥补search弱点,不用group,返回列表;在这里插入图片描述

  3. sub方法:替换后返回,不限制次数,在这里插入图片描述

  4. sub支持函数调用:
    【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第8张图片

  5. split方法:
    【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第9张图片

第三节 http https有关知识

(一)http和https概况

  1. http定义:超文本传输协议,默认端口80;

  2. https定义:http+ssl(安全套接字层),默认端口443;更安全,性能相对低;

  3. http格式:scheme://host[:port]/path/…/[?query-string][#anchor]

    ​ scheme:协议(例如:http、https、ftp)

    ​ host:服务器主机地址ip或者域名

    ​ port:端口号

     		path:资源访问路径
    

    ​ query-string:参数,客户端发送数据

    ​ anchor:锚点,页面内部的指定位置,指定跳转

    例如:http://localhost:8080/files/wel/file02.html

    ​ http://www.baidu.com/nihao.html#section-02

(二)http请求方法

序号 方法 描述
1 get 请求指定的页面,并返回网页内容实体
2 head 类似于get请求,只不过只返回网页报头
3 post 向指定资源提供数据进行处理请求,数据包含在请求体重,涉及资源修改
4 put 从客户端向服务器传送数据取代指定文档内容
5 delete 请求服务器删除指定页面
6 connect 1.1预留给能够将连接改为管道方式的代理服务器
7 options 允许可独断查看服务器的性能
8 trace 回显服务器收到的请求,主要用于测试诊断

http1.0定义了三种:get、post、和head方法

http1.1定义了五种:options、put、delete、trace和connect

(三)请求头和响应头

  1. 常规头部描述:
    【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第10张图片
    如上图所示,浏览网页的时候头部信息描述点主要有:

    一是request url:指的是所请求的网址信息;

    二是request method:指的是请求8种方式之一;

    三是status code:系统状态码;

    四是remote address:远程地址既客户端ip地址;

    五是referrer policy:指明当前流量来源参考,一般不设置;

  2. http请求头:
    【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第11张图片
    如上图所示,http请求头通常包括如下内容:

    一是accept:指的是客户端可以接收什么类型的内容;

    二是accept-encoding:指的是客户端接收的压缩编码方式;

    三是accept-language:指的是客户端接收的语言;

    四是cache-control:

    五是connection:close/keep-alive,告知服务器请求完后是保持连接还是既断开连接;

    六是cookie:客户端发送给服务器的用户信息;

    七是host:服务器的域名信息;

    八是referer:表明自己是从哪个网页跳转而来的;

    九是upgrade-insecure-requests:

    十是user-agent:客户端浏览器的相关信息,表明身份;

  3. http响应头:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第12张图片
    如上图数据所示,意义如下:

    一是cache-control:指的是不缓存相关内容;

    二是connection:指的是服务器确认是继续连接还是断开连接;

    三是content-encoding:指的是服务器返回的编码压缩格式;

    四是date:指的是服务器返回时间;

    五是expires:指的是网页内容什么时候过期;

    六是pragama:

    七是server:指的是服务器软件及版本的标识;

  4. 状态码:202:成功;404:not found;500:服务器内部错误;301:永久重定向;302,307:临时重定向至新的url;400:请求url找不到;403:服务器拒绝访问,权限不足;

(四)抓包工具

  1. chrome右键点击下部的“检查”按钮,进入到浏览器抓包工具界面;
  2. 主要内容:elements网页源码;console控制台;sources由那些文件组成;network请求和返回数据;preserve log不要清除网络重定向日志;

第四节 多任务操作

(一)多任务概述

  1. 并行:任务量<核数,真的多任务;并发:任务量>核数,假的多任务;
  2. 单核cpu:时间片轮转、优先级调用方式,假的多任务;
  3. 让不同函数同步进行,界面局部刷新,一心二用;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第13张图片

(二)线程操作

  1. threading模块里面有个类叫做thread(),对象实例化成为线程,对象的方法.start即启动线程;

  2. 引用对象并未真正开始运行线程,对象start之后,子线程才真正运行;

  3. target也可以指向一个类,一般不用,用到了类继承特性:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第14张图片

  4. 函数中对全局变量修改是否加global,要看是否修改对全局变量的指向进行了修改,如果修改既内存地址指针变化必须用global,如果只是对变量自身进行变动,不用;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第15张图片

  5. 互斥锁解决资源争夺问题:
    【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第16张图片

  6. 多锁也可以存在死锁,利用时间阈值来控制;

(三) 进程操作

  1. 程序:代码;进程:代码+资源;

  2. 特点:进程占用资源;写时拷贝;

  3. multiprocessing模块的Process类:方法start,利用ps -aux命令可以查看进程

  4. 区别:进程比如说你开了多个qq,线程比如说你一个qq开了多个窗口;

    先有进程后有线程,本质上是线程具体实施多任务;(进程是一个单位,线程是具体干活的);进程是多个资源分配来实现多任务;线程是同一个资源里面有多个执行指针;

(四)协程操作

  1. 可迭代:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第17张图片

第二章 爬虫基本知识

第一节 爬虫的基本概念

  1. 爬虫的概念:网页爬虫也叫网页蜘蛛,网络机器人,就是模拟客户端发送接收响应,抓取信息;
  2. 爬虫原则:原则上网页能做的事情,爬虫都能做到;
  3. 爬虫的流程:url——>发送请求——>获得响应——>提取数据——>保存数据;
  4. 爬虫分类:通用爬虫和聚焦爬虫;
  5. 通用爬虫:一般搜索引擎这样面对整个互联网的爬虫叫做通用爬虫;
  6. 聚焦爬虫:一般来说面对特定网站进行数据爬取得爬虫叫做聚焦爬虫;
  7. ROBOTS协议:有些网站主人会在主页写一个robots.txt来道德约束别人什么是可以爬的,什么是不可以的;

第二节urllib库操作

  1. python自带的库,基本网络爬虫库,关于网络请求内容都在urllib模块下requests模块;
  2. urlopen函数:resp = request.urlopen(“http://www.baidu.com”);
  3. 打印返回内容:print(resp.read());
  4. 方法种类:read(size)、readline()、readlines、getcode等;
  5. urlretrieve函数:网页下载到本地,urlretrieve(“http://www.baidu.com”,“baidu.html”)
  6. urlencode函数:urllib的parse模块,qs=parse.urlencode(data)字符串编码,主要针对url后面的参数部分,data={“wd”:“刘德华”},url+"?"+qs为真实url;
  7. parse_qs函数:与urlencode相反,解码功能,
  8. urlparse函数:对url部分进行功能分割,res = parse.urlparse(url);
  9. urlsplit函数:比urlparse函数返回结果缺少params属性:?前面紧贴内容,用的少,比如:http://www.baidu.com/hello?wd=fsdfjsdfs,hello就是params返回值;
  10. request.Request类:如果需要增加请求头内容时候,需要用到:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第18张图片
  11. 比如拉钩网的职位信息,一是隐藏了数据到ajax,二是改变成了post方式,那就需要我们利用Request类来进行操作:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第19张图片
  12. 还是会提示你访问太频繁的话,看看浏览器是否能正常访问,如果正常那就是误导信息,那就需要进一步完善请求头:比如referer信息;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第20张图片

第三节 proxyhandler处理器

  1. 基本思路是创建Request类的opener,用opener打开连接请求【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第21张图片
  2. httpbin.org网站origin项能很好的查看你的对外公网ip地址;
  3. 编辑不使用代理网站访问结果如下:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第22张图片
  4. 使用代理地址:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第23张图片

第四节 cookie基本操作

  1. 格式:Set-Cookie:NAME=VALUE;Expires/Max-age=DATE;Path=PATH;Domain=DOMAIN_NAME;SECURE

  2. NAME:cookie的名字;VALUE:cookie的值;Expires:cookie的过期时间;path:cookie作用的路径;Domain:cookie作用的域名;SECURE:是否只在https下使用;

  3. 方法1:类似user-agent一样,将Cookie值放入header中:(不演示)【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第24张图片

  4. 方法2:利用http.cookiejar模块(还有HTTPCookieProcessor)【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第25张图片

  5. 知道用户名密码,利用Request类和opener先走一遍登录,得到cookie,然后直接用opener继续访问就可以了。(抢票应用环境)【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第26张图片

  6. cookie保存在本地:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第27张图片

  7. 有些网站浏览器关闭cookie信息就消失,open函数同理,存储此类网站,保存即将丢弃的cookie信息:在这里插入图片描述

  8. 查看cookie.txt文件可见:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第28张图片

  9. 读取本地cookie,如果过期也要加参数【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第29张图片

第五节 错误处理

在这里插入图片描述

  1. 错误一:写入文件的时候发生下图1错误,黑色图像代码已更正后解决;【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第30张图片在这里插入图片描述

第三章 其他爬虫库操作

第一节 requests库操作

(一)requests库的安装

  1. pip install requests
  2. 中文文档:http://docs.python-requests.org/zh_CN/latest/index.html

(二)requests库get方法

  1. 得到一个返回类:response = requests.get(url),response所带的属性有:

    ​ content:二进制文件;text:自行解码后的unicode形式;

    ​ (注意:text如果出现乱码形式,自行从content解码)

  2. 其他属性:url:完整url路径;encoding:编码格式;statur_code:响应码;

  3. 传递参数:注意中文字符问题【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第31张图片

(三)requests库post方法

  1. 格式:response = requests.post(url,data=data)
  2. 测试拉勾网职位信息:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第32张图片
  3. 返回的值是字符串,response.json()可以返回json字典形式内容;

(四)requests库代理使用

  1. get中传递,proxies=proxy;proxy = { ‘http’:代理ip}【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第33张图片

(五)requests库cookie使用

  1. get返回response对象的属性cookie的方法get_dict()字典形式返回cookie;
  2. session会话:requests.session();session.post(url;data=data;headers=headers);【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第34张图片

(六)requests库cookie使用

  1. get返回response对象的属性cookie的方法get_dict()字典形式返回cookie;
  2. session会话:【python笔记002】:字符串、正则表达式和爬虫基本库urllib、requests操作_第35张图片

(六) 处理不信任证书

requests库get方法中加入vertify = false参数即可;

你可能感兴趣的:(python学习笔记,python,正则表达式,http)