Python爬虫
2021/8/17 20:36:32
本文主要是介绍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()
这篇关于Python爬虫的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享