Python爬虫
request高级用法
-
--维持会话--
- 主要是在登录过程中使用该功能(
session = request.Session()
)
- 主要是在登录过程中使用该功能(
-
--阻塞与非阻塞--
- 阻塞:程序会等待一个结果出现(不出现就一直等待)然后才执行其他的代码
- 造成的问题:requests模块是阻塞的,发出请求会等待响应回来(若不回来,则一直等待),对于单次影响不大,若多次请求的话,时间过长
- 解决方案:
- 多线程
- 多进程
- GIL---->全局解释器锁
- 协程
- 异步
- scarpy框架就是异步的,效率很高
- 阻塞:程序会等待一个结果出现(不出现就一直等待)然后才执行其他的代码
-
--IP池--
- 存放IP的文件或者数据库
- 作用:不可避免IP代理失效问题,代理的筛选、检测、去掉无用的代理,提供给爬虫程序
- IP代理网站:
- 免费:站大爷、西刺网
- 收费:蘑菇代理、阿布云、快代理、代理云、豌豆代理
- 爬虫一般是收费的、稳定的IP代理
- 设计IP池
- 有IP来源(免费、收费)
- 筛选、检测IP的可用性
- 良好的接口供程序使用
- 存放IP的文件或者数据库
-
--逻辑、分组、引用--
- 分组:
- 一个正则可能有多个括号,可以通过数括号来进行分组数量的统计
- group()取出第几组
- 0--取出全部的结果
- 1--取出第一组结果
- 2--取出第二组结果
- 反向引用
-
引用捕获到的东西
- 用法:\number number为捕获到的数据的分组编号
示例:
-
- 分组:
# --- coding: utf-8 ---d
import re
# 引用5次 分组1捕获到的结果
pattern='135(\d)\\1{5}(.-)'
string='13588888865'
r=re.search(pattern,string)
print(r)
D:\Python\Python3.7\python3.exe "E:/Other Document/Py_Project/Python3_proj/Pachong/逻辑分组引用.py"
<re.Match object; span=(0, 11), match='13588888865'>
Process finished with exit code 0
- --re模块的使用--
- ---
re.search(pattern、string、flages)
只匹配一次 - ---
re.match(pattern、string、flages)
匹配字符串开头,并且只匹配一次 - ---
re.findall(pattern、string、flages)
匹配所有的结果,返回结果为列表形式,若没有匹配到,则返回空列表 注意:反转列表:[::-1] - ---
re.finditer(pattern、string、flages)
和findall()
相似,只是结果返回结果是个迭代器iterator,需要遍历 - ---
re.split(pattern、string,maxsplit,flages)
,maxsplit
:要切割的次数,默认0,表示全部切割 - flages参数的使用
re.I
-->无视大小写 大小写都可以匹配re.S
-->使“.”能够匹配换行符
- ---
string='asd3fasdfJava8hih'
pattern='df(.-?)8' #匹配以df开头,以8结尾的里面额所有的内容(除了换行符),并提取出来
result=re.findall(pattern,string)
print(result)
D:\Python\Python3.7\python3.exe "E:/Other Document/Py_Project/Python3_proj/Pachong/逻辑分组引用.py"
Java
Process finished with exit code 0
- --对象式的--
- object = re.compile('正则规则')-->较高效
- object = search(string、flages)
--常见动态页面分类--
- Javascript:用户访问网站-->服务器--->文件(JS)-->浏览器--->先(运算)执行脚本(加密)-->结果渲染浏览器渲染-->显示出来
- 爬虫顺序:
- 先解密JS
- 得到参数
- 用于get/post等请求
- 爬虫顺序:
- jQuery
- Ajax
- DHTML:Dinamic HTML 动态的html,将html、css、javascript整合在一起
动态页面处理方法
- 解密(JS)反写 (效率不高)
- 使用Python模块 execjs 执行JS脚本,可以利用模块执行别人写的脚本
- PyV8 引擎 (Python2)
- 抓包
- 找参数,若参数没有加密,直接爬虫
- 若参数加密,解密JS
- Selenium
- 不解密,不用抓包,不用知道是get还是post,直接控制浏览器,在浏览器中打开,只要浏览器可以访问,爬虫就可以成功。
- 优点:反反爬虫能力强
- 缺点:速度慢、消耗计算机资源大、阻塞式的
- 多线程
- 多进程
- Splash (类似Selenium Docker容器)异步式的
- 分布式
- 不解密,不用抓包,不用知道是get还是post,直接控制浏览器,在浏览器中打开,只要浏览器可以访问,爬虫就可以成功。
Selenium
-
自动化测试工具
-
类似--按键精灵--,反复执行编写的命令
-
模拟浏览器访问网站
-
操作浏览器,浏览器会对(JS、Ajax、jQuery)进行渲染,选然后的数据可以用Selenium直接获取
数据的提取:
find_element_by_xpath():driver.find_element_by_xpath()