Appearance
《Python3网络爬虫开发实战》学习笔记
写在前面
- 书籍介绍:暂无。
- 我的简评:暂无。
- !!福利:文末有书籍地址、笔记思维导图、相关资料下载地址哦
第一章 开发环境配置
1.1.Python3的安装
windows、linux、mac
windows下安装有2种:通过Anaconda安装;直接下载安装包安装
Linux下的安装:命令安装;源码安装;Anaconda安装
Mac下安装:Homebrew;安装包安装;Anaconda安装
1.2.请求库的安装
requests、Selenium、ChromeDriver、GeckoDriver、PhantomJS、aiohttp
爬虫可以简单分为几步:抓取页面;分析页面;存储页面
requests属于第三方库,Python默认不会自带这个库
Selenium是一个自动化测试工具,利用它我们可以驱动浏览器执行特定的动作,如点击、下拉等操作
Selenium需要浏览器来配合使用,只有安装ChromeDriver,才能驱动Chrome浏览器完成相应的操作,对于Firefox也可以使用同样的方式完成Selenium的对接
目前最新的Chrome浏览器版本已经支持无界面模式了
PhantomJS是一个无界面的、可脚本编程的WebKit浏览器引擎,它原生支持多种Web标准:DOM操作、CSS选择器、JSON、Canvas以及SVG
aiohttp是一个提供异步Web服务的库,从Python3.5版本开始,Python加入了async/await关键字,使得回调的写法更加直观和人性化
1.3.解析库的安装
lxml、Beautiful Soup、pyquery、tesserocr
lxml是Python的一个解析库,支持HTML和XML的解析,支持XPath解析方式,而且解析效率非常高
Beautiful Soup是Python的一个HTML或XML的解析库,可以用它来方便的从网页中提取数据
pyquery同样是一个强大的网页解析工具,他提供了和jQuery类似的语法来解析HTML文档
tesserocr是Python的一个OCR识别库
1.4.数据库的安装
mysql、mongodb、redis
MySQL是一个轻量级的关系型数据库
MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组
Redis是一个基于内存的高效的非关系型数据库。推荐下载Redis Desktop Manager可视化管理工具,来管理Redis
1.5.存储库的安装
PyMySQL、PyMongo、redis-py、RedisDump
MySQL需要安装PyMySQL、MongoDB需要安装PyMongo
对于Redis来说,我们要使用redis-py库莱与其交互
RedisDump是一个用于Redis数据导入/导出的工具,是基于Ruby实现的
1.6.Web库的安装
Flask、Tornado
Flask是一个轻量级的Web服务程序,它简单、易用、灵活
Tornado是一个支持异步的Web框架,通过使用非阻塞I/O流,可以支撑成千上万的开放连接,效率非常高
1.7.App爬取相关库的安装
Charles、mitmproxy、Appium
Charles是一个网络抓包工具,相比Fiddler,其功能更为强大,而且跨平台支持得更好,可以选用它作为主要的移动端抓包工具
mitmproxy是一个支持HTTP和HTTPS的抓包程序,类似Fiddler、Charles的功能,只不过它通过控制台的形式操作
Appium是移动端的自动化测试工具,类似前面所说的Selenium,利用它可以驱动Android、iOS等设备完成自动化测试,比如模拟点击、滑动、输入等操作
1.8.爬虫框架的安装
pyspider、Scrapyd、Scrapy-Splash、Scripy-Redis
pyspider是国人binux编写的强大的网络爬虫框架,它带有强大的WebUI、脚本编辑器、任务监控器、项目管理器以及结果处理器,同时支持多种数据库后端、多种消息队列,另外还支持JavaScript渲染页面的爬取
Scrapy是一个十分强大的爬虫框架,依赖的库比较多,至少需要依赖的库有Twisted14.0、lxml3.4和pyOpenSSL0.14
Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具
Scrapy-Redis是Scrapy的分布式扩展模块
1.9.部署相关库的安装
Docker、Scrapyd-Client、Scrapyd API、Scrapyrt、Gerapy
Docker是一种容器技术,可以将应用和环境等进行打包,形成一个独立的、类似于iOS的App形式的“应用”
Scrapyd是一个部署和运行Scrapy项目的工具,可以将写好的Scrapy项目上传到云主机并通过API来控制它的运行
Scrapyrt为Scrapy提供了一个调度的HTTP接口,不需要再执行Scrapy命令而是通过请求一个HTTP接口来调度Scrapy任务了
Gerapy是一个Scrapy分布式管理模块
第二章 爬虫基础
2.1.HTTP基本原理
URI、URL
URI统一资源标志符;URL统一资源定位符;
URL是URI的子集
HTML超文本
在浏览器里看到的网页就是超文本解析而成的
HTTP、HTTPS
访问资源需要的协议类型
HTTP用于从网络传输超文本数据到本地浏览器的传送协议,它能保证高效而准确的传送超文本文档
HTTPS是以安全为目标的HTTP通道
请求过程
打开Chrome浏览器,右击并选择“检查”项,即可打开浏览器的开发者工具
请求
请求由客户端向服务端发出,可以分为4部分内容:请求方法、请求地址、请求头、请求体
常见的请求方法有两种:GET和POST
请求的网址,即统一资源定位符URL
请求头用来说明服务器要使用的附加信息,比较重要的信息由Cookie、Referer、User-Agent等
请求体一般承载的内容是POST请求中的表单数据
响应
响应,由服务端返回客户端,可以分为三部分:响应状态码、响应头和响应体
响应头包含了服务器对请求的应答信息,如Content-Type、Server、Set-Cookie等
最重要的当属响应体的内容了
2.2.网页基础
组成
HTML相当于骨架,JavaScript相当于肌肉,CSS相当于皮肤
网页包括文字、按钮、图片和视频等各种复杂的元素,其基础架构就是HTML
CSS即层叠样式表,“层叠”是指当在HTML中引用了数个样式文件,并且样式发生冲突时,浏览器能依据层叠顺序处理,“样式”指网页中文字大小、颜色、元素间距、排列等格式
网页里看到的一些交互和动画效果,如下载进度条、提示框、轮播图等就是JavaScript的功劳
结构
节点、节点树
所有标签定义的内容都是节点,他们构成了一个HTML DOM树
W3C DOM标准被分为3个不同的部分:核心DOM针对任何结构化文档的标准模型;XML DOM针对XML文档的标准模型;HTML DOM针对HTML文档的标准模型
HTML文档中德所有内容都是节点:整个文档是一个文档节点,每个HTML元素是元素节点,HTML元素内的文本是文本节点,每个HTML属性是属性节点,注释是注释节点
选择器
使用CSS选择器来定位节点
CSS选择器还支持嵌套选择
2.3.爬虫的基本原理
概述
爬虫就是获取网页并提取和保存信息的自动化程序
步骤:获取网页、提取信息、保存数据、自动化程序
能抓的数据
对应各自的URL,是基于HTTP或HTTPS协议的,只要是这种数据,爬虫都可以抓取
JavaScript渲染页面
2.4.会话和Cookies
静态网页和动态网页
动态网页可以动态解析URL中参数的变化,关联数据库并动态呈现不同页面内容,还可以实现用户登录和注册的功能
无状态HTTP
HTTP协议对事务处理是没有记忆功能的,也就是说服务器不知道客户端是什么状态
会话Cookie就是把Cookie放在浏览器内存里,浏览器在关闭后该Cookie即失效;持久Cookie则会保存到客户端的硬盘中,下次还可以继续使用,用于保持用户登录状态
2.5.代理的基本原理
基本原理
服务器会检测某个IP在单位时间内的请求次数,如果超过这个阈值,就会直接拒绝服务,返回一些错误信息
代理服务器的功能是代理网络信息
代理作用
代理的作用:突破自身IP的访问限制;访问一些单位或团体内部资源;提高访问速度;隐藏真实IP
爬虫代理
使用代理隐藏真实的IP,让服务器误以为是代理服务器在请求自己
代理分类
根据协议分类:FTP代理、SSL/TLS代理、RTSP代理、Telnet代理、POP3/SMTP代理、SOCKS代理
根据匿名程度区分:高度匿名代理(原封不动的转发)、普通匿名代理、透明代理、间谍代理
代理设置
使用网上的免费代理;使用付费代理服务;ADSL拨号
第三章 基本库的使用
- 最基础的HTTP库有urllib、httplib2、requests、treq等
3.1.使用urllib
发送请求、处理异常、解析链接、分析Robots协议
包含如下4个模块:request最基本的HTTP请求模块,可以用来模拟发送请求;error异常处理模块,可以捕获异常然后进行重试或其他操作以保证程序不会意外终止;parse工具模块,提供了许多URL处理方法比如拆分、解析、合并等;robotparser主要用来识别网站的robots.txt文件然后判断哪些网站可以爬
高级用法有各种Handler子类继承BaseHandler,如HTTPDefaultErrorHandler用于处理HTTP响应错误,错误都会抛出HTTPError类型的异常;HTTPRedirectHandler用于处理重定向;HTTPCookieProcessor用于处理Cookies;ProxyHandler用于设置代理;HTTPPasswordMgr用于管理密码;HTTPBasicAuthHandler用于管理认证
parse模块支持如下协议的URL处理:file、ftp、gopher、hdl、http、https、imap、mailto、mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、sip、sips、snews、svn、svn+ssh、telnet和wais
Robots协议也称爬虫协议、机器人协议,全名叫做网络爬虫排除标准,用来告诉爬虫和搜索引擎哪些页面可以抓取,哪些不可以抓取
3.2.使用requests
基本用法:GET请求抓取网页、JSON数据、二进制数据,POST请求添加headers处理响应
高级用法:文件上传files字段,cookies获取与设置,会话维持Seesion对象,SSL证书验证verify参数,代理设置proxies参数,超时设置timeout参数,身份认证auth类,预请求prepared request对象
3.3.正则表达式
- match()匹配,search()扫描,findall()返回所有,sub()替换,compile()编译
3.4.抓取猫眼电影排行
第四章 解析库的使用
4.1.使用XPath
一门在XML文档中查找信息的语言
所有节点//*,子节点/,父节点..,属性匹配[@class=''],文本获取text(),属性获取@href,属性多值匹配li[contains(@class, 'itm')],多属性匹配li[contains(@class, 'itm') and @name='itm'],按序选择[last()]、[position()❤️],节点轴选择ancestor、descendant、follow-sibling
4.2.使用Beautiful Soup
强大的解析工具,借助网页的结构和属性等特性解析网页
节点选择器:选择元素soup.p、soup.title;提取信息soup.title.name、soup.p.attrs['name']、soup.p.string;嵌套选择soup.head.title.string;关联选择soup.p.contents、soup.p.children、soup.a.parent、soup.a.next_sibling、list(soup.a.parents)[0].attrs['class']
方法选择器:find_all(name='ul')、find_all(attrs={'id': 'list-1'})、find_all(text=re.compile('link'));find()、find_parents()、find_next_siblings、find_next()
CSS选择器:select('li')、select('ul')[0].attrs['id']、select('ul')[0].get_text()
4.3.使用pyquery
多种初始化方式:传入字符串、传入url、传入文件名
基本CSS选择器:doc("#container .list li")
查找节点:find('li')、children('.active')、parent()、siblings()、doc('li').items()
获取信息:a.attr('href')、doc('.active a').text()
节点操作:addClass('active')、attr('name', 'link')、doc.find('p').remove()
伪类选择器:doc('li:first-child')、doc('li:gt(2)')
第五章 数据存储
5.1.文件存储
Text、JSON、CSV
TXT文本存储:with open()、file.write()、file.close()
JSON文件存储:json.loads()、json.dumps()
CSV文件存储:csv.writer(csvfile)、writer.writerow(['id', 'name'])、csv.reader(csvfile)
5.2.关系型数据库存储
MySQL
连接connect()、获取游标cursor()、执行execute()、关闭close()、事务commit()和rollback()
5.3.非关系型数据库存储
MongoDB、Redis
Mongo存储:连接pymongo.MongoClient('mongodb://localhost:/27017');指定数据库client.test;指定集合db.students;插入collection.insert(student);查询collection.find_one({'name': 'Mike'});计数collection.find().count();更新collection.update_one(condition, {'$inc': {'age': 1}});删除collection.remove({'name': 'Kevin'})
Redis存储:连接StrictRedis(host='localhost', port=6379, db=0, password='xxx');键操作exists(name)、type(name)、set(name, value)
RedisDump提供两个可执行命令,redis-dump用于导出数据,redis-load用于导入数据
第六章 Ajax数据爬取
6.1.什么是Ajax
异步的JavaScript和XML
基本原理:发送Ajax请求到网页更新的过程分为3步发送请求、解析内容、渲染网页
6.2.Ajax分析方法
特殊的请求类型xhr
点击请求查看Request URL、Request Headers、Response Headers、Response Body
6.3.Ajax结果提取
6.4.分析Ajax爬取今日头条街拍美图
第七章 动态渲染页面爬取
- Python提供了许多模拟浏览器运行的库,如Selenium、Splash、PyV8、Ghost等
7.1.Selenium的使用
可以驱动浏览器执行特定的动作,可以获取浏览器当前呈现的页面源代码
基本使用:browser=webdriver.Chrome();brower.get('https://www.baidu.com');
声明浏览器对象:from selenium import webdriver; browser = webdriver.Firefox()
访问页面:browser.get()、browser.close()
查找节点:browser.find_element_by_id('q')、browser.find_elements_by_css_selector('.service-bd li')
节点交互:输入文字send_keys()、清空文字clear()、点击按钮click()
动作链:鼠标拖拽actions = ActionChains(browser); actions.drag_and_drop(source, target); actions.perform();
执行JavaScript:browser.execute_script('alert("hah")')
获取节点信息:获取属性get_attribute()、获取文本值get_text()、获取id位置标签名等等element.tag_name
切换iframe:browser.switch_to.frame('iframeResult')
延时等待:browser.implicitly_wait(10)隐式等待;wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR, '.btn-search'))显式等待;
前进后退:browser.back()、browser.forward()
Cookies:browser.get_cookies()、browser.add_cookie({'name': 'bob'})
选项卡管理:browser.switch_to_window(browser.window_handles[1])
异常处理:try except来捕获异常
7.2.Splash的使用
异步方式处理多个网页渲染过程,获取渲染后页面源代码或截图。通过关闭图片渲染或使用block规则来加速页面渲染速度,可执行特定的JavaScript脚本,可通过Lua脚本来控制页面渲染过程,获取渲染详细过程并通过HAR格式呈现
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库
Splash对象属性:args加载时配置参数、js_enabled执行开关JavaScript、resource_timeout加载超时时间、images_enabled是否加载图片、plugins_enabled浏览器插件是否开启、scroll_position控制页面滚动
Splash对象的方法:go()请求某个链接、wait()控制页面的等待时间、jsfunc()直接调用JavaScript定义的方法、evaljs()执行JavaScript代码并返回最后的执行结果、runjs()执行JavaScript代码更偏向于执行某些动作或声明某些方法、autoload()设置每个页面自动加载的对象、call_later()通过设置定时任务和延时时间来实现任务延时执行、http_get()模拟发送HTTP的GET请求、set_content()设置页面的内容、html()获取网页的源代码、png()获取PNG格式的网页截图、har()获取页面加载过程描述、get_cookies()获取当前页面的Cookies、set_viewport_size()设置当前浏览器页面的大小、set_custom_headers()设置请求头、select_all()选中所有符合条件的节点、mouse_click()模拟鼠标点击操作
Splash API调用:render.html用于获取JavaScript渲染的页面的HTML代码、render.png获取网页截图、render.har()获取页面加载的HAR数据、render.json()获取接口返回的响应数据、execute()最为强大的接口
7.3.Splash负载均衡配置
搭建一个负载均衡器来把压力分散到各个服务器上
配置负载均衡:upstream定义服务集群配置、weight指定各个服务的权重
7.4.使用Selenium爬取淘宝商品
第八章 验证码的识别
8.1.图形验证码的识别
对一些有干扰的图片做一些灰度和二值化处理,会提高图片识别的正确率
用tessercr库识别该验证码
要将原图先转换为灰度图像,然后再指定二值化阈值
8.2.极验滑动验证码的识别
模拟点击验证按钮识别滑动缺口的位置模拟拖动滑块
识别并通过极验验证码的验证,包括分析识别思路、识别缺口位置、生成滑块拖动路径、模拟实现滑块拼合通过验证等步骤
极验验证码广泛应用于直播视频、金融服务、电子商务、游戏娱乐、政府企业等各大类型网站
极验验证码还增加了机器学习的方法来识别拖动轨迹
官方网站的安全防护有如下几点说明:三角防护之防模拟、三角防护之防伪造、三角防护之防暴力
采用直接模拟浏览器动作的方式来完成验证
验证码图片缺口的四周边缘有明显的断裂边缘,边缘与边缘周围有明显的区别
8.3.点触验证码的识别
借助在线验证码平台
12306就是典型的点触验证码
一个专门提供点触验证码服务的站点TouClick
识别的思路:一是文字识别;二是图像识别;
8.4.微博宫格验证码的识别
新型交互式验证码,每个宫格之间会有一条指示连线,指示了应该的滑动轨迹
获取模板、模板匹配、模拟拖动
第九章 代理的使用
9.1.代理的设置
response=request.get('http://xxx.;')
Selenium同样是可以设置代理,包括两种方式:一种是有界面浏览器如Chrome;另一种是无界面浏览器如PhantomJS
9.2.代理池的维护
存储模块、获取模块、检测模块、接口模块
存储模块使用Redis的有序集合,用来做代理的去重和状态标识,同时它也是中心模块和基础模块,将其他模块串联起来
获取模块定时从代理网站获取代理,将获取的代理传递给存储模块,并保存到数据库
检测模块定时通过存储模块获取所有代理,并对代理进行检测,根据不同的检测结果对代理设置不同的标识
接口模块通过Web API提供服务接口,接口通过连接数据库并通过Web形式返回可用的代理
9.3.付费代理的使用
迅代理、阿布云代理
讯代理上可供选购的代理类别:优质代理、独享动态、独享秒切、动态混拨、优质定制
9.4.ADSL拨号代理
代理池可以挑选出许多可用代理,但是常常其稳定性不高、响应速度慢
要追求更加稳定的代理,就需要购买专有代理或者自己搭建代理服务器
ADSL非对称数字用户环路,它的上行和下行带宽不对称,采用频分复用技术把普通的电话线分成了电话、上行和下行3个相对独立的信道,从而避免了相互之间的干扰
ADSL通过拨号的方式上网,需要输入ADSL账号和密码,每次拨号就更换一个IP
首先需要成功安装Redis数据库并启动服务,另外还需要安装requests、redis-py、Tornado库
要做的两件事:一是怎样将主机设置为代理服务器,二是怎样实时获取拨号主机的IP
设计的架构要考虑支持多主机的问题
数据库要做的就是定时对每台主机的代理进行更新,而更新时又需要拨号主机的唯一标识,根据主机标识查出这条数据,然后将这条数据对应的代理更新
9.5.使用代理爬取微信公众号文章
第十章 模拟登录
- 实际是在客户端生成了Cookies。而Cookies里面保存了SessionID的信息,登录之后的后续请求都会携带生成后的Cookie发送给服务器
10.1.模拟登录并爬取GitHub
Headers里面包含了Cookies、Host、Origin、Referer、User-Agent等信息
Form Data包含了5个字段,commit是固定的字符串Sign in,utf-8是一个勾选字符,authenticity_token较长,其初步判断是一个Base64加密的字符串,login是登录的用户名,password是登录的密码
访问登录页面要完成两件事:一是通过此页面获取初始的Cookies,而是提取出authenticity_token
10.2.Cookies池的搭建
不登录直接爬取的一些弊端:1、设置了登录限制的页面无法爬取;2、一些页面和接口虽然可以直接请求,但是请求一旦频繁,访问就容易被限制或者IP直接被封
Cookies池需要有自动生成Cookies、定时检测Cookies、提供随机Cookies等几大核心功能
思路:Cookies池中保存了许多账号和登录后的Cookies信息,并且Cookies池还需要定时检测每个Cookies的有效性,如果某Cookies无效,那就删除该Cookies并模拟登陆生成新的Cookies
存储模块负责存储每个账号的用户名密码以及每个账号对应的Cookies信息,同时还需要提供一些方法来实现方便的存取操作
生成模块负责生成新的Cookies。会从存储模块逐一拿取账号的用户名和密码,然后模拟登录目标页面,判断登陆成功,就将Cookies返回并交给存储模块存储
检测模块需要定时检测数据库中的Cookies。需要设置一个检测链接,不同的站点检测链接不同,检测模块会逐个拿取账号对应的Cookies去请求链接,如果返回的状态是有效的,那么此Cookies没有失效,否则Cookies失效并移除
接口模块需要用API来提供对外服务的接口。由于可用的Cookies可能有多个,可以随机返回Cookies的接口,这样保证每个Cookies都有可能被取到。Cookies越多,每个Cookies被取到的概率就会越小,从而减少被封号的风险
第十一章 App的爬取
App的爬取相比Web端爬取更加容易,反爬虫能力没那么强,而且数据大多是以JSON形式传输,解析更加简单
常用的抓包软件有WireShark、Fiddler、Charles、mitmproxy、AnyProxy等,他们的原理基本是相同的
11.1.Charles的使用
- 相比Fiddler来说,Charles的功能更强大,而且跨平台支持更好
11.2.mitmproxy的使用
mitmproxy是一个支持HTTP和HTTPS的抓包程序,有类似Fiddler、Charles的功能,只不过它是一个控制台的形式操作
mitmproxy有如下几项功能:拦截HTTP和HTTPS请求和响应;保存HTTP会话并进行分析;模拟客户端发起请求,模拟服务器返回响应;利用反向代理将流量转发给指定的服务器;支持Mac和Linux上的透明代理;利用Python对HTTP请求和响应进行实时处理
mitmproxy还提供了命令行式的编辑功能
mitmproxy的强大之处体现在它的另一个工具mitmdump
11.3.mitm爬取“得到”App电子书信息
11.4.Appium的基本使用
- Appium是一个跨平台移动端自动化测试工具,可以非常便捷地为iOS和Android平台创建自动化测试用例
11.5.Appium的基本使用
11.6.Appium+mitmdump爬取京东商品
第十二章 pyspider框架的使用
12.1.pyspider框架介绍
国人binux编写的强大网络爬虫系统
带有强大的WebUI、脚本编辑器、任务监控器、项目管理器、结果处理器
与scrapy的比较:提供了WebUI给编写和调试用;调试非常简便;支持PhantomJS来进行JavaScript渲染页面的采集;内置了pyquery作为选择器;可扩展程度不足;
如果要快速实现一个页面的抓取,推荐使用pyspider;如果要应对反爬程度很强、超大规模的抓取,推荐使用scrapy
pyspider的架构主要分为Scheduler(调度器)、Fetcher(抓取器)、Processer(处理器)三个部分,整个爬取过程受到Monitor(监控器)的监控,抓取的结果被Result Worker(结果处理器)处理
Scheduler发起任务调度,Fetcher负责抓取网页内容,Processer负责解析网页内容,然后将生成的Request发给Scheduler进行调度,将生成的提取结果输出保存
12.2.pyspider的基本使用
12.3.pyspider用法详解
第十三章 Scrapy框架的使用
13.1.Scrapy框架介绍
- 基于Twisted的异步处理框架、功能强大爬取效率高,相关扩展组件多,可配置和可扩展高
13.2.Scrapy入门
13.3.Selector的用法
13.4.Spider的用法
13.5.Downloader Middleware的用法
13.6.Spider Middleware的用法
13.7.Item Pipeline的用法
13.8.Scrapy对接Seleium
13.9.Scripy对接Splash
13.10.Scrapy通用爬虫
13.11.Scrapyrt的使用
13.12.Scrapy对接Docker
13.13.Scrapy爬取新浪微博
第十四章 分布式爬虫
准备工作、搭建Redis服务器、部署代理池和Cookie池、配置Scrapy-redis、配置存储目标、运行结果
14.1.分布式爬虫原理
14.2.Scrapy-Redis源码解析
14.3.Scrapy分布式实现
14.4.Bloom Filter的对接
第十五章 分布式爬虫的部署
15.1.Scrapyd分布式部署
- Scrapyd提供一系列HTTP接口来帮助我们部署、启动、停止、删除爬虫程序,支持版本管理,可以管理多个爬虫任务
15.2.Scrapyd-Client的使用
15.3.Scrapyd对接Docker
15.4.Scrapyd批量部署
15.5.Gerapy分布式管理
- Gerapy是一个基于Scrapyd、Scrapyd API、Django、Vue搭建的分布式爬虫管理框架
写在后面
- pdf书籍、笔记思维导图、资料打包下载地址:暂无
- 思维导图在线查看:点击打开
- 得到电子书地址:暂无