一.scrapy文档
https://www.osgeo.cn/scrapy/intro/tutorial.html
1.pip install pipenv(安装虚拟环境pipenv)
①pipenv --venv (查看虚拟环境)
②pipenv graph(查看虚拟环境扩展)
③pipenv --rm(删除虚拟环境)
④pipenv shell (初始化虚拟环境)
2.pip install Scrapy (安装Scrapy爬虫框架)
3.scrapy startproject ArticleSpider(使用scrapy创建一个工程ArticleSpider)
4.scrapy genspider cnblogs news.cnblogs.com(创建一个爬虫cnblogs)
5.scrapy crawl cnblogs(启动爬虫,将命令封装成一个脚本,便于做项目调试,创建main.py文件)
6.pipenv install selenium (安装selenium库,作用模拟用户在网站的操作,如点击、输入等)
7.pipenv install undetected-chromedriver(安装undetected-chromedriver库。作用调起chrome浏览器,防止网站识别为selenium的操作)
8.pipenv install requests(安装requests,网络请求)
9.pipenv install pillow(安装pillow,图像处理)
10.pipenv install mysqlclient(安装mysqlclient,mysql操作)
11.pipenv install opencv-python(安装opencv图像处理)
12.pipenv install numpy(安装numpy,机器学习算法库)
13.pipenv install redis(安装redis)
14.pipenv install fake-useragent(安装fake-useragent,user-agent库)
15.pipenv install scrapy-redis (安装scrapy-redis,可创建分布式爬虫)
二.在 VS Code 中,更改 Python 编译器环境:
1. 打开 VS Code,打开一个 Python 文件。
2. 按下快捷键 Ctrl + Shift + P (或者 macOS 上的 Cmd + Shift + P ),调出命令面板。
3. 在命令面板中,输入“Python: Select Interpreter”,然后从命令列表中选择该命令。
三.基础技术要点(重要)
1.使用css选择器定位到页面元素
2.获取cookie保存,并使用cookie
3.使用selenium,使用undetected-chromedriver
4.获取通过js加载的数据,包括js加载的html元素
5.scrapy中items的定义和使用
6.scrapy中yield使用只能是Request()请求和itmes的存储,yield->Request()时是url下载,yield->itmes时会在pipelines.py中处理数据
7.itmes.py定义数据
8.pipelines.py处理itmes中数据
9.middlewares.py中间件,"requests请求中间件”
①图片的下载,继承ImagesPipeline类,重写ImagesPipeline的方法
②自定义数据本地保存。scrapy自带的exporters本地数据保存
③数据异步存储到mysql数据库
10.settings.py配置文件
①ROBOTSTXT_OBEY协议,(需要将ROBOTSTXT_OBEY关掉,改成False)
②ITEM_PIPELINES,(配置pipelines访问执行的类,访问类的权重)
③IMAGES_STORE,(存储下载图片的路径)
④IMAGES_URLS_FIELD,(需要下载图片的原始路径,itmes中图片对应的字段)
⑤DOWNLOAD_DELAY,(限制IP次数的访问频率(秒单位))
⑥RANDOMIZE_DOWNLOAD_DELAY,(设为True时,DOWNLOAD_DELAY*0.5~DOWNLOAD_DELAY*.15随机产生)
⑦DOWNLOADER_MIDDLEWARES(“requests请求中间件”)
⑧COOKIES_ENABLED,(爬虫第一个请求带cookie后,下面的所有请求跟随带cookie)
⑨USER_AGENT,(所有强求携带User-agent(中间件的DOWNLOADER_MIDDLEWARES配置,middlewarws.py->RandomUserAgentMiddlware类随机生成的user-agent,USER_AGENT可注释掉))
四.网站模拟登录和滑动验证识别,知乎网模拟登录拿到cookie解决方案,加大模拟登录的难度:1.识别出chromedriver。2.加登录验证
1.undetected-chromedriver驱动最新版的浏览器,selenium操作登录获取cookie
①selenium获取html元素
2.此处记得修改scrapy的源码 selenium\webdriver\common\actions\pointer_input.py中将DEFAULT_MOVE_DURATION改为50,否则滑动很慢
3.使用opencv识别验证
4.使用第三方机器学习方法识别验证(百度EasyDL的“物体检测”:https://console.bce.baidu.com/easydl/model/objdct/models)
①如何发布物体检测API:https://cloud.baidu.com/doc/EASYDL/s/3k38n3ej4
②EasyDL版控制台
③物体检测API调用文档:https://cloud.baidu.com/doc/EASYDL/s/Yk38n3erc
④获取 Access_token:https://ai.baidu.com/ai-doc/REFERENCE/Ck3dwjhhu
5.redis存储cookie
五.通过CrawlSpider对招拉勾聘网站进行整站爬取
1.scrapy中Rule和LinkExtractor的使用
六.Scrapy突破反爬虫的限制
1.突破反爬限制一:(不限制IP访问频率时是异步请求)
①.User-agen模拟,随机更换User-agen
②.限制IP访问的随机频率
③.IP代理池,89免费代理:https://www.89ip.cn/
④.登录校验码,获取cookie
2.突破反爬限制二:(只能同步操作请求)
①.通过selenium完全模拟浏览器操作,获取js网站动态数据
七.Scrapy进阶开发(重要)
1.selenium->webdriver动态网站的爬取
2.undetected_chromedriver动态网站的爬取
3.使用browser.page_source获取动态网站的全部数据(selenium操作)
4.scrapy.selector获取页面元素(获取标签属性值::attr(value)。获取标签内容::text)(selenium操作)
5.使用execute_script()执行js代码,以下示例是鼠标下拉刷新操作的js代码(selenium操作)
execute_script("window.scrollTo(0, document.body.scrollHeight); var lenOfPage=document.body.scrollHeight; return lenOfPage;")
6.设置chromedriver不加载图片(selenium操作)
7.chromedriver无界面访问(selenium操作)
8.scrapy的启动与暂停,和重新启动(scrapy命令)
①启动爬虫:scrapy crawl cnblogs(博客园) -s JOBDIR=job_info/001
按一次Ctrl+c:暂停;再次按一次Ctrl+c:启动;连续按两次Ctrl+c:强制停止。
爬取过的url不会再爬取,暂停和强制停止后都是跟踪者上次停止后的url再次执行。
②启动一个新的爬虫:scrapy crawl cnblogs -s JOBDIR=job_info/002
重新启动一个新的爬虫关键是斜杠后面的值002
8.将selenium集成到scrapy中
①scrapy信号源(相当于vue中的生命周期)
②接收scrapy信号源的dispatcher类库,需要pip install scrapy== 1.7版本才可以使用
八.scrapy-redis分布式爬虫(将url放入到redis消息对列中执行)
1.目录ScrapyRedis分布式项目
2.settings.py配置文件
①BOT_NAME,SCHEDULER,DUPEFILTER_CLASS(分布式爬虫必配置)
②配置redis连接:REDIS_HOST = 'localhsot',REDIS_PORT = 6379,REDIS_PARAMS = {'password': 'xueXiang@!!*888_',}
③分布式爬虫运行时,需要将第一个页面加入到redis消息队列中
九.cookie池系统设置和实现,将模拟登录单独做成一个服务
1.模拟登录服务
①超级鹰验证码识别
②移动验证码识别(百度EasyDL或者opencv)
2.cookie检测服务
十.scrapyd部署scrapy爬虫(打包本地的爬虫后给scrapyd运行)
①pipenv install scrapyd(srcrapy爬虫服务,srcrapy必须在scrapy项目的运行环境下运行)
②pipenv install scrapy-client(打包本地的爬虫工程)
③在scrapy.cfg中配置deploy
点击空白处退出提示
评论