整理于2020年10月下旬,献给不甘平凡的你
更多企业级爬虫知识请查收于:https://blog.csdn.net/weixin_45316122/article/details/109840745
目录
想了想这个得分5步写爬取,解析,存储,反爬,加速
一:爬取
如何选取适当的方式来实现页面抓取
我所见页面大致只有2种渲染方式a
1.服务端渲染,页面结果直接返回。(静态页面)
2.客服端渲染,页面结果由js生成,页面可能还经过ajax等方式从后台获取。(动态页面)
解决服务端渲染类型:
直接使用requests
Trick:可以考虑看我的博客-------python3爬虫工具,将curl语法转化为python的requests爬虫 包你35秒爬出来
解决客服端渲染类型:
方式一:寻找ajax接口
1,Chrome、Firefox浏览器f12查看请求~~~~~本人两个浏览器交互使用
2,Fiddler抓包工具,注意需要设置代理(神奇的工具,你关了抓包工具代理也没了)
方式二:模拟浏览器执行
1.selenium驱动chrome,firefox等浏览器抓取
2.spynner/ghost.py依赖于pyqt
3.phantomjs无界面浏览器
4.pyppeteer自动化抓取
Trick:python版puppeteer
三:一刀见血的提取js数据
1.正则表达式提取关键的js.渲染数据都隐藏在html head的js变量里
2.使用debug,大致读懂js的流程,抠出相关流程的js
四:模拟执行js
1.selenium,使用execute—script执行js代码,return返回
Trick:请用下面三种常用的包运行js python3 爬虫 中国土地市场网 破解js加密详解 (该文章中有使用示例)
2.pyexecjs,个人喜好用,因为支持phantomjs引擎
3.pyv8,淘汰玩意python2 用,还停止了维护
4.js2py,最简单的一种,直接能让python执行js代码
说了这么多,懂事的朋友应该发现了,上面都是说的网页版的
Trick:由于去年这个时候app端抓取经历的少,app逆向当时还没涉及,这里先占个坑,后面补上,想要学习app逆向的朋友可以留言
二:解析
目的:保留有效信息
常用匹配方式:
1.正则~~re库,万能方式,高效,编写不便
2.Xpath~lxml,Scrapy Selector库,最常用方式
3.jsonpath~jsonpath库,非常方便取json格式数据(虽然只会使用..方法)
4.CSS ~cssselect库(彻底放弃,xpath那么好用)
5.bs4~bs4库
~~来点真家伙
智能解析(啥,不会深度学习,那你和我一样学了一个假的python),你没看错,也没搞错,虽然我一个都没有弄过,逼还是要装起来~~
高级大牛肯定会说写规则这么麻烦,那我来个智能的吧。。。
方式一:readability,用它定义不同区块的不同标注集合,计算最可能的区块位置,如使用Newspaper库
方式二:疏密度判断,计算单位个数区块内的平均文本内容长度,根据疏密程度计算
方式三:Scrapely自学习,指定一个页面和提取结果样例,让它自学提前规则,提前同类页面(这个学一下,比较现实可行)
方式四:深度学习,使用深度学习来对解析位置进行有监督的学习,需要大量标注数据
~~据我所知的4中方式都吐出来了,可是我不会一种啊啊啊
Trick:当时确实不会没骗大家,现在可用方式四深度学习来实现智能解析,也就是大家所说的人工智能
三:存储
存储需要寻找合适的媒介来保存结果
常用方式:
1.文件存储,如json,csv,txt,图片,视频,音乐等
使用库:csv,xlwt,json,pandas,python-docx等
2.数据库存储,如mysql,mongodb,hadoop,kafka,hbase,Redis等
使用库:pymysql,redis-py,pymongo等等
3.云存储’,百度云,阿里云,腾讯云等(需要根据各自提供的接口上传数据)
4.浏览器存储,就像你写一个web里面加数据一样的,具体实现还得查资料
四:反反爬
参考链接:感谢你又一次的打开了我的博客,反爬在里面,你来不来
https://blog.csdn.net/weixin_45316122/article/details/93790675(python3~~爬虫小总结)
五:加速(高效爬取)
对海量数据抓取,也是本博客最精彩的一部分啦
常见的措施:
1.多线程\进程(分情况,io密集用线程···cpu密集用进程(cpu多核处理))
io密集用线程,多线程库threading,GIL限制,你得知道生产者消费者模式,加锁与队列能有效优化,
2.异步~·~变成非阻塞式加速
asyncio(我见过一个博主,就是用这个库来实现异步),Twisted(基于驱动实现异步),Scrapy(基于twisted)等
3.分布式,多台机器跑肯定快啊
kafka分布式消息系统,Scrapy-Redis
4.优化程序,如解析,调度,去重等实现方式
这里就说说去重实现方式!!
# SPIDER_MIDDLEWARES = {
# 'scrapy_deltafetch.DeltaFetch': 100
# }
# DELTAFETCH_ENABLED = False
redis去重高效,BloomFilter省空间去重,参考简书小温候
5.架构加速,你怕不怕
Scrapy 单个项目对接好分布式,存储等配置后,部署到Scrapyd,再用Gerapy监控,完美
https://blog.csdn.net/weixin_45316122/article/details/93887433(python3爬虫的运行状态scrapy+scrapyd +Gerapy分布式爬虫管理框架(转))