网站搭建:具有公网ip主机,主机安装apache或nginx软件

获取网页

urllib,requests
https://docs.python-requests.org/en/master/
请求报文:方法,请求头,请求体

用户登陆与状态:session,cookies
http无状态,使用session,cookies保持状态,前者在服务器,后者在客户端(浏览器)
状态:识别用户,以及登陆凭证

session和cookies配合
第一次请求,服务器发set-cookie给客户端,客户端存在cookies。下次请求发送,服务端识别
无效,过期会导致返回错误或跳转登陆界面

cookies可以保存在浏览器内存或客户端硬盘。设置时间也可以很久。

=====

  • 代码:7 ```python

    get请求

    r = requests.get(url, param,headers) r.text # 文本 r.content # 二进制

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库

  • 代码10

    远程服务器:sftp

js文件:分析后台ajax接口,模拟js渲染:Selenium、Splash

自动化

实战