网站搭建:具有公网ip主机,主机安装apache或nginx软件
获取网页
urllib,requests
https://docs.python-requests.org/en/master/
请求报文:方法,请求头,请求体
用户登陆与状态:session,cookies
http无状态,使用session,cookies保持状态,前者在服务器,后者在客户端(浏览器)
状态:识别用户,以及登陆凭证
session和cookies配合
第一次请求,服务器发set-cookie给客户端,客户端存在cookies。下次请求发送,服务端识别
无效,过期会导致返回错误或跳转登陆界面
cookies可以保存在浏览器内存或客户端硬盘。设置时间也可以很久。
=====
post请求
r = requests.post(url, data, files)
response信息
r.text # 返回的文本,html/json等 r.content # 二进制格式 r.status_code # 状态码 r.url r.history # 请求历史
以下两项为非内置数据类型
r.headers # 响应头 r.cookies
内置状态码常量
requests.codes.xx
```
避免多次请求,都要发送cookie:使用requests的session对象。可模拟同一个session
ssl认证处理:
跳过错误,忽略指定证书
指定本地证书用作客户端证书
身份认证:oauth,HTTP Basic Access Authentication
频繁访问,需要设置代理:get的proxies参数。https代理,socks代理
requests的Request对象
=======
多进程,多线程:
多个浏览器窗口,一个浏览器窗口多个网页
进程是线程的集合
并发:多个指令,快得好像是同时运行。依然是顺序执行
并行:多个处理器运行多条指令。多核。
等待的时候处理其它任务。io密集型,爬虫。
计算密集型/cpu密集型任务
python实现多线程:thread
守护线程:不重要的线程,主线程结束,守护线程强制结束
互斥锁:多个线程共享资源
多个线程同时读取某个数据,需要加锁保护
pythonGIL限制,导致即使是多核条件下,一个 Python 进程下的多个线程,同一时刻也只能执行一个线程。
某个线程想要执行,必须先拿到 GIL,我们可以把 GIL 看作是通行证,并且在一个 Python 进程中,GIL 只有一个
- 代码:5:线程
多核处理器,使用多进程,不回受GIL影响。发挥多核优势
对于爬虫这种 IO 密集型任务来说,多线程和多进程影响差别并不大。对于计算密集型任务来说,Python 的多进程相比多线程,其多核运行效率会有成倍的提升
进程间数据无法共享,需要依靠其它机制。
python实现:multiprocessing
multiprocessing 提供了一系列的组件,如 Process(进程)、Queue(队列)、Semaphore(信号量)、Pipe(管道)、Lock(锁)、Pool(进程池)
- 代码:6
提取信息
正则表达式
正则表达式在线测试:https://tool.oschina.net/regex/#
匹配模式:
模 式 | 描 述 |
---|---|
\w | 匹配字母、数字及下划线 |
\W | 匹配不是字母、数字及下划线的字符 |
\s | 匹配任意空白字符,等价于 [\t\n\r\f] |
\S | 匹配任意非空字符 |
\d | 匹配任意数字,等价于 [0~9] |
\D | 匹配任意非数字的字符 |
\A | 匹配字符串开头 |
\Z | 匹配字符串结尾,如果存在换行,只匹配到换行前的结束字符串 |
\z | 匹配字符串结尾,如果存在换行,同时还会匹配换行符 |
\G | 匹配最后匹配完成的位置 |
\n | 匹配一个换行符 |
\t | 匹配一个制表符 |
^ | 匹配一行字符串的开头 |
$ | 匹配一行字符串的结尾 |
. | 匹配任意字符,除了换行符,当 re.DOTALL 标记被指定时,则可以匹配包括换行符的任意字符 |
[…] | 用来表示一组字符,单独列出,比如 [amk] 匹配 a、m 或 k |
[^…] | 不在 [] 中的字符,比如 匹配除了 a、b、c 之外的字符 |
* | 匹配 0 个或多个表达式 |
+ | 匹配 1 个或多个表达式 |
? | 匹配 0 个或 1 个前面的正则表达式定义的片段,非贪婪方式 |
{n} | 精确匹配 n 个前面的表达式 |
{n, m} | 匹配 n 到 m 次由前面正则表达式定义的片段,贪婪方式 |
a|b | 匹配 a 或 b |
() | 匹配括号内的表达式,也表示一个组 |
在python中的使用
- 代码8
xpth:bs4,pyquery,lxml
网页节点属性,css选择器
html解析库:pyquery,直接解析dom节点及属性。
- 代码9
数据保存
txt:html源码,json
二进制:图片,视频,音频。
数据库:mysql,mongodb
mongodb:文档型数据库,c++编写的非关系型数据库。是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档、数组及文档数组。
安装mongodb,安装pymongo库