如何免费创建云端爬虫集群

news/2024/7/19 9:45:45 标签: 爬虫, git, 数据库

在线体验

scrapydweb.herokuapp.com

注册帐号

  1. Heroku

访问 heroku.com 注册免费账号(注册页面需要调用 google recaptcha 人机验证,登录页面也需要科学地进行上网,访问 app 运行页面则没有该问题),免费账号最多可以创建和运行5个 app

  1. Redis Labs(可选)

访问 redislabs.com 注册免费账号,提供30MB 存储空间,用于下文通过 scrapy-redis 实现分布式爬虫

通过浏览器部署 Heroku app

  1. 访问 my8100/scrapyd-cluster-on-heroku-scrapyd-app 一键部署 Scrapyd app。(注意更新页面表单中 Redis 服务器的主机,端口和密码)
  2. 重复第1步完成4个 Scrapyd app 的部署,假设应用名称为 svr-1, svr-2, svr-3svr-4
  3. 访问 my8100/scrapyd-cluster-on-heroku-scrapydweb-app 一键部署 ScrapydWeb app,取名 myscrapydweb
  4. (可选)点击 dashboard.heroku.com/apps/myscra… 页面中的 Reveal Config Vars 按钮相应添加更多 Scrapyd server,例如 KEY 为 SCRAPYD_SERVER_2, VALUE 为 svr-2.herokuapp.com:80#group2
  5. 访问 myscrapydweb.herokuapp.com
  6. 跳转 部署和运行分布式爬虫 章节继续阅读。

自定义部署

查看内容

安装工具

  1. Git
  2. Heroku CLI
  3. Python client for Redis:运行 pip install redis 命令即可。

下载配置文件

新开一个命令行提示符:

git clone https://github.com/my8100/scrapyd-cluster-on-heroku
cd scrapyd-cluster-on-heroku
复制代码

登录 Heroku

heroku login
# outputs:
# heroku: Press any key to open up the browser to login or q to exit:
# Opening browser to https://cli-auth.heroku.com/auth/browser/12345-abcde
# Logging in... done
# Logged in as username@gmail.com
复制代码

创建 Scrapyd 集群

  1. 新建 Git 仓库
cd scrapyd
git init
# explore and update the files if needed
git status
git add .
git commit -a -m "first commit"
git status
复制代码
  1. 部署 Scrapyd app
heroku apps:create svr-1
heroku git:remote -a svr-1
git remote -v
git push heroku master
heroku logs --tail
# Press ctrl+c to stop logs outputting
# Visit https://svr-1.herokuapp.com
复制代码
  1. 添加环境变量

    • 设置时区
    # python -c "import tzlocal; print(tzlocal.get_localzone())"
    heroku config:set TZ=Asia/Shanghai
    # heroku config:get TZ
    复制代码
    • 添加 Redis 账号(可选,详见 scrapy_redis_demo_project.zip 中的 settings.py
    heroku config:set REDIS_HOST=your-redis-host
    heroku config:set REDIS_PORT=your-redis-port
    heroku config:set REDIS_PASSWORD=your-redis-password
    复制代码
  2. 重复上述第2步和第3步完成余下三个 Scrapyd app 的部署和配置:svr-2svr-3svr-4

创建 ScrapydWeb app

  1. 新建 Git 仓库
cd ..
cd scrapydweb
git init
# explore and update the files if needed
git status
git add .
git commit -a -m "first commit"
git status
复制代码
  1. 部署 ScrapydWeb app
heroku apps:create myscrapydweb
heroku git:remote -a myscrapydweb
git remote -v
git push heroku master
复制代码
  1. 添加环境变量

    • 设置时区
    heroku config:set TZ=Asia/Shanghai
    复制代码
    • 添加 Scrapyd server(详见 scrapydweb 目录下的 scrapydweb_settings_v8.py
    heroku config:set SCRAPYD_SERVER_1=svr-1.herokuapp.com:80
    heroku config:set SCRAPYD_SERVER_2=svr-2.herokuapp.com:80#group1
    heroku config:set SCRAPYD_SERVER_3=svr-3.herokuapp.com:80#group1
    heroku config:set SCRAPYD_SERVER_4=svr-4.herokuapp.com:80#group2
    复制代码
  2. 访问 myscrapydweb.herokuapp.com

部署和运行分布式爬虫

  1. 上传 demo 项目,即 scrapyd-cluster-on-heroku 目录下的压缩文档 scrapy_redis_demo_project.zip
  2. 将种子请求推入 mycrawler:start_urls 触发爬虫并查看结果
In [1]: import redis  # pip install redis

In [2]: r = redis.Redis(host='your-redis-host', port=your-redis-port, password='your-redis-password')

In [3]: r.delete('mycrawler_redis:requests', 'mycrawler_redis:dupefilter', 'mycrawler_redis:items')
Out[3]: 0

In [4]: r.lpush('mycrawler:start_urls', 'http://books.toscrape.com', 'http://quotes.toscrape.com')
Out[4]: 2

# wait for a minute
In [5]: r.lrange('mycrawler_redis:items', 0, 1)
Out[5]:
[b'{"url": "http://quotes.toscrape.com/", "title": "Quotes to Scrape", "hostname": "d6cf94d5-324e-4def-a1ab-e7ee2aaca45a", "crawled": "2019-04-02 03:42:37", "spider": "mycrawler_redis"}',
 b'{"url": "http://books.toscrape.com/index.html", "title": "All products | Books to Scrape - Sandbox", "hostname": "d6cf94d5-324e-4def-a1ab-e7ee2aaca45a", "crawled": "2019-04-02 03:42:37", "spider": "mycrawler_redis"}']
复制代码

总结

  • 优点
    • 免费
    • 可以爬 Google 等外网
    • 可扩展(借助于 ScrapydWeb)
  • 缺点
    • 注册和登录需要科学地进行上网
    • Heroku app 每天至少自动重启一次并且重置所有文件,因此需要外接数据库保存数据,详见 devcenter.heroku.com

GitHub 开源

my8100/scrapyd-cluster-on-heroku


http://www.niftyadmin.cn/n/1745108.html

相关文章

原生JavaScript实现倒计时

原生JavaScript实现倒计时 一&#xff0c;HTML代码 <div class"content3"><p>距高考还有</p><div class"time"> <span id"LeftTime"></span></div> </div>二&#xff0c;CSS代码 .content3{f…

原生JavaScript实现五色小球

原生JavaScript实现五色小球 一&#xff0c;HTML代码 <div id"ball"></div> <script src"underscore.js"></script> <!--Underscore.js 1.9.1 --- 这里需要添加一个 js 库&#xff0c;网上直接搜索就可以找到下载了-->二…

Leetcode 712. 两个字符串的最小ASCII删除和

题目描述&#xff1a; https://leetcode-cn.com/problems/minimum-ascii-delete-sum-for-two-strings/ 解题思路&#xff1a; 也是典型的dp问题。利用二维dp数组求解。 建立一个二维数组Dp[ i ][ j ]&#xff0c;Dp[ i ][ j ]表示从s1中拿出 i 个元素和从 s2 中拿出 j 个元素的…

原生JavaScript实现div拖拽

原生JavaScript实现div拖拽 一&#xff0c;HTML代码 <div id"div"></div>二&#xff0c;CSS代码 *{margin: 0;padding: 0;}#div{width:50px;height:50px;border-radius: 100%;position: absolute;left: 10%;top: 20%;background-color: #000000;}三&am…

mysql-索引:B+树实现

数据结构里的平衡多叉树 要理解索引的原理 有个前提 就是要先理解平衡多叉树这种数据结构 平衡树的作用就是1.插入数据快(链表的优点)2.查找数据快(数组的优点) 也就是说 平衡树这种数据结构兼顾了链表和数组的优点 多叉就是有多个节点 应用场景是磁盘的文件系统 数据库里的索引…

原生JavaScript实现放大镜

原生JavaScript实现放大镜 一&#xff0c;HTML代码 <div id"box"><div id"min"><img src"imgs/min.jpg" alt""><b></b></div><div id"max"><img src"imgs/max.jpg&quo…

SpringMVC_异常处理的三种方式

一&#xff1a;SpringMvc中常见异常处理三种方式1&#xff1a;使用 SpringMvc 中的异常处理器SimpleMappingExceptionResolver 2&#xff1a;使用自定义异常处理器 3&#xff1a;使用异常处理注解 二&#xff1a;异常处理方式一SimpleMappingExceptionResolver 当程序运行过程中…

原生JavaScript实现 简单进度条

原生JavaScript实现 简单进度条 一&#xff0c;HTML代码 <div id"progresscontainer"><div id"progress" style"width: 0%"> <span id"j">0%</span></div></div>二&#xff0c;CSS代码 #progr…