如何使用pyinstaller打包scrapy
一、目录结构
./root
├── huaban // scrapy项目
├── build // 编译目录
├── dist // 生产目录
│ ├── spiders
│ ├── items.py
│ ├── middlewares.py
│ ├── pipelines.py
│ └── settings.py
├── crawl.py // pyinstall打包入口
├── crawl.spec // 打包spec文件
└── scrapy.cfg // scrapy配置
二、Pyinstaller打包
1、使用Scrapy运行脚本
在运行项目时,我们基本都是使用scrapy crawl SpiderName的方式来执行爬虫的,这里我们不使用脚本的方式来运行我们的爬虫,而是使用Scrapy内的方法来运行爬虫。详细见 《Run Scrapy from a script》
我们使用CrawlerProcess, 在项目目录下,新建crawl.py文件,代码如下:
#导入模块
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
# 你的爬虫文件
from huaban.spiders.spiders import HuabanSpider
process = CrawlerProcess(get_project_settings())
process.crawl(HuabanSpider)
process.start()
然后,使用 pyinstaller crawl.py 进行打包,生成dist,build和crawl.spec这三个文件,此时我们在终端打开dist->crawl->crawl.exe进行运行,会发现提示
"No such file or directory: 'XX\XX\scrapy\VERSION"
这个主要是因为缺少scrapy文件夹下的VERSION,这里我们在打包后的dist->crawl目录下,新建scrapy,将我们安装的scrapy下的VERSION和mime.types两个文件复制到创建的scrapy文件夹中,完成后在运行exe,则提示我们缺少了那些模块,这里我们必须在crawl.py中引入缺少的模块:
这里是我所用到的模块:
import scrapy.spiderloader
import scrapy.statscollectors
import scrapy.logformatter
import scrapy.dupefilters
import scrapy.squeues
import scrapy.extensions.spiderstate
import scrapy.extensions.corestats
import scrapy.extensions.telnet
import scrapy.extensions.logstats
import scrapy.extensions.memusage
import scrapy.extensions.memdebug
import scrapy.extensions.feedexport
import scrapy.extensions.closespider
import scrapy.extensions.debug
import scrapy.extensions.httpcache
import scrapy.extensions.statsmailer
import scrapy.extensions.throttle
import scrapy.core.scheduler
import scrapy.core.engine
import scrapy.core.scraper
import scrapy.core.spidermw
import scrapy.core.downloader
import scrapy.downloadermiddlewares.stats
import scrapy.downloadermiddlewares.httpcache
import scrapy.downloadermiddlewares.cookies
import scrapy.downloadermiddlewares.useragent
import scrapy.downloadermiddlewares.httpproxy
import scrapy.downloadermiddlewares.ajaxcrawl
import scrapy.downloadermiddlewares.decompression
import scrapy.downloadermiddlewares.defaultheaders
import scrapy.downloadermiddlewares.downloadtimeout
import scrapy.downloadermiddlewares.httpauth
import scrapy.downloadermiddlewares.httpcompression
import scrapy.downloadermiddlewares.redirect
import scrapy.downloadermiddlewares.retry
import scrapy.downloadermiddlewares.robotstxt
import scrapy.spidermiddlewares.depth
import scrapy.spidermiddlewares.httperror
import scrapy.spidermiddlewares.offsite
import scrapy.spidermiddlewares.referer
import scrapy.spidermiddlewares.urllength
import scrapy.pipelines
import scrapy.core.downloader.handlers.http
import scrapy.core.downloader.contextfactory
此时运行exe,则顺利运行我们的爬虫;
2、配置crawl.spec
虽然看似我们的爬虫顺利运行了,但是当我们将dist->crawl目录移到其他地方时,我们的爬虫就不行了;我尝试在pipelines.py下打印,发现压根没有日志,而在exe运行的日志中,显示了 Enabled item pipelines:[] ,这说明我们的pipelines在打包是没有成功引入,这里我们需要修改之前生成出来的crawl.spec文件
我们找到datas和hiddenimports,引入我们的项目文件及配置,如下:
a = Analysis(['crawl.py'],
pathex=['.\huaban'],
binaries=[],
datas=[(".\scrapy.cfg",".")],
hiddenimports=["huaban.items","huaban.middlewares",'huaban.pipelines','huaban.settings','huaban.spiders'],
hookspath=[],
.....
此时我们使用 pyinstaller crawl.spec 进行打包,这里注意,是打包spec文件,而不是原来的py文件了,当然,由于crawl会被清空,所以要重新将VERSION和mime.types两个文件复制scrapy文件夹,最后我们将crawl复制到其他地方并执行exe,爬虫顺利的运行。
最后
有兴趣的朋友可以去我【github 下载】 详细的项目哦~~~
参考资料
评论 (0)
- 还没有评论,来第一条吧。