在windows搭建scrapyd跑scrapy爬虫

562 阅读5分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

梦想橡皮擦:2022 年如果你还在用 windows7 系统的电脑写程序,那么你会碰到跟我一样的好多问题,幸运的是解决问题的过程是充满快乐的~

写在前面

完成这篇博客之前,你需要再次认识几个新的词语,第一个是scrapy,这个比较简单了,爬虫框架,我们可以用它写爬虫,第二个scrapyd就是今天标题里面的新单词,它相当于一个组件,能够对 scrapy 项目进行远程部署,远程调度,后面的两篇博客,我们还会介绍两个新词,一个是scrapydweb,另一个是spiderkeeper,它们带给我的是一个基于scrapyd的可视化组件,集成并且能够提供更多的可视化功能,当然界面也会比scrapyd美观一些。

scrapyd 安装非常简单

pip install scrapyd -i pypi.doubanio.com/simple/

其实这个地方有的人会说,担心 pip 安装的不是最新版,可以去 github 上下载最新的源码,然后自己编译一下也是可以的

github 地址:github.com/scrapy/scra…

命令执行python setup.py install

在控制台运行scrapyd 看到如下结果,之后在浏览器打开http://localhost:6800/
Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 浏览器显示画面 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 先进展到这里,暂停一下,我们继续编写一个 scrapy 的爬虫,一会用来测试。

编写一个简单的 scrapy 爬虫

对于 scrapy 爬虫,还是那句话,孰能生巧,越用越好使,本篇博客爬取的是百度指数的榜单,关键代码只写了几行

import scrapy
from baiduindex.items import BaiduindexItem

class IndexSpider(scrapy.Spider):
    name = 'index'
    allowed_domains = ['top.baidu.com']
    start_urls = ['http://top.baidu.com/buzz?b=1&fr=topindex']

    def parse(self, response):
        title_list = response.xpath("//a[@class='list-title']/text()").extract()
        for title in title_list:
            item = BaiduindexItem()
            item["title"] = title
            yield item

发布 scrapy 爬虫到 scrapyd 中

打开 scrapy 根目录下面的scrapy.cfg文件,将url=http://localhost:6800/ 前面的注释取消

返回到 scrapy 创建的项目根目录,然后在 cmd 下运行scrapy deploy -l ,这时,你的电脑会出现如下错误提示

E:\crawl100\demo82\baiduindex>scrapy deploy -l
Scrapy 2.3.0 - project: baiduindex
Unknown command: deploy
Use "scrapy" to see available commands

核心意思是说deploy命令不存在,这时候不要着急,还需要安装一个模块scrapyd-client

安装命令

pip install scrapyd-client -i pypi.tuna.tsinghua.edu.cn/simple

scrapyd-client 模块是专门打包 scrapy 爬虫项目到scrapyd服务中的,安装完成之后,在你的 Scripts 文件夹中会出现 scrapyd-deploy 无后缀文件,这个 scrapyd-deploy 无后缀文件是启动文件,在 Linux 系统下可以远行,在 windows 下是不能运行的,所以需求做一些其他工作,使其在 windows 可以运行。

Scripts 文件夹所在的位置,如果你的 Python 是使用的默认安装流程:C:\Users\Administrator\AppData\Local\Programs\Python\Python37\Scripts

Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 在该目录下面新建一个``文件,然后写入如下内容

@echo off
"python.exe所在的路径\python.exe" "刚才的路径\scrapyd-deploy" %*

配置完成之后如下图 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 再次打开命令框,执行scrapyd-deploy -l 出现下图所示情况,表示成功 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫

再次查看 scrapy.cfg 文件,并上传项目到 scrapyd 上

Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 运行下述命令

scrapyd-deploy <target> -p <project> target 为你的服务器命令,project 是你的工程名字,这两个名字需要在 scrapy.cfg 提前配置好,注意下图中 deploy:first 冒号后面的即为<target>

Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 上传成功 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 同时请注意在你的项目根目录下面生成了两个新的文件夹,记住它们,我们后面的博客会用到 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫

scrapyd 运行你的项目

使用如下命令运行

curl http://localhost:6800/schedule.json -d project=PROJECT_NAME -d spider=SPIDER_NAME

PROJECT_NAME 项目名字,刚才我们设定的是 baiduindex SPIDER_NAME 爬虫名字,也就是 scrapy 爬虫的名字 index 例如本案例使用:curl http://localhost:6800/schedule.json -d project=baiduindex -d spider=index

上述命令使用了curl,注意电脑上默认是没有的,你需要安装一下,过程非常简单

curl 下载地址 :download.csdn.net/download/hi…

如果你没有找到,可以参照这篇文章即可:www.cnblogs.com/gered/p/106… Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 本以为到这里就结束了,我还是太年轻了,运行种竟然出现了这个错误 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫

builtins.NotImplementedError: spawnProcess not available since pywin32 is not installed

这就没办法了,继续修改直到可以正常使用为止。

打开pywin32下载地址,在龟速般的下载中,等待,https://github.com/mhammond/pywin32/releases

下载不动的可以使用我提供的地址进行下载

pywin32-225.win-amd64-py3.7 下载地址 : download.csdn.net/download/hi…

安装完毕之后,需要重启一下scrapyd

都配置完毕,在运行,发现成功了,同时http://localhost:6800/jobsJobs 出现如下图所示内容

Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫 Python爬虫入门教程 82-100 在windows搭建scrapyd跑scrapy爬虫

如果不使用 curl 进行管理,可以直接安装scrapyd-api进行管理,命令为 pip install python-scrapyd-api 具体操作可以在 github 中搜索 scrapyd api 进行学习。

写在后面

还有几个 curl 请求的 url

1、获取状态 http://localhost:6800/daemonstatus.json

2、获取项目列表 http://localhost:6800/listprojects.json

3、获取项目下已发布的爬虫列表 http://localhost:6800/listspiders.json?project=myproject

4、获取项目下已发布的爬虫版本列表 http://localhost:6800/listversions.json?project=myproject

5、获取爬虫运行状态 http://localhost:6800/listjobs.json?project=myproject

6、启动服务器上某一爬虫(必须是已发布到服务器的爬虫) http://localhost:6800/schedule.json (post 方式,data={"project":myproject,"spider":myspider})

7、删除某一版本爬虫 http://localhost:6800/delversion.json (post 方式,data={"project":myproject,"version":myversion})

8、删除某一工程,包括该工程下的各版本爬虫 http://localhost:6800/delproject.json(post 方式,data={"project":myproject})

细节可以查看文档:scrapyd.readthedocs.io/en/latest/a…