运维系列&AI系列&Lenovo-G双系统系列(前传-装之前搜索的):Scrapy爬虫的打包Auto-py-to-exe/Pyinstall
Scrapy爬虫的打包Auto-py-to-exe/Pyinstall
Scrapy爬虫的打包Auto-py-to-exe/Pyinstall
前言
朋友托了我写了个小爬虫,然后写成之后老是要在我这儿跑,交付不了给朋友。项目太小,也不好用scrapyd
托管在服务器。找了找有pyinstall
和Auto-py-to-exe
可以打包成可执行程序,也遇到了不少问题。好不容易成功了,略微分享一二。
步骤
Scrapy代码部分
原来在Scrapy
下,我都是直接使用CLI命令行方式
启动爬虫的:
$ scrapy crawl xypt -O xypt.xml
现在需要采用pyinstall
(auto-py-to-exe
)打包,就不能再使用命令行来启动了 ,我们就需要写一个python脚本
来启动相关的spider
。
根据Run Scrapy from a script,编写了从python脚本
启动爬虫的方法,还简单做了个交互。
1. 系统调用方案
也可以用cmdline库
来进行调用,看起来更简单,就是直接在execute
里面把原来CLI
的输入写进去
from scrapy.cmdline import execute
execute(['scrapy', 'crawl', 'xypt', '-O', 'xypt.xml']);
execute(['scrapy', 'crawl', 'xyptinfo', '-O', 'infoResult.xml']);
2. API启动方案
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import warnings
import xlwings
from twisted.internet import reactor, defer
from scrapy.crawler import CrawlerRunner
from scrapy.utils.project import get_project_settings
warnings.filterwarnings("ignore")
# CrawlerRunner获取settings.py 里的设置信息
runner = CrawlerRunner(get_project_settings())
@defer.inlineCallbacks
def crawl():
yield runner.crawl("xypt")
reactor.stop()
@defer.inlineCallbacks
def crawl_detail(val):
if val == "1": # 判断num的值
print ("即将为您爬取基础信息...")
yield runner.crawl("xyptinfo")
elif val == "2":
print ("即将为您爬取档案...")
yield runner.crawl("xyptpunishinfo")
elif val == "3":
print ("即将为您爬取人员档案...")
yield runner.crawl("xyptstaffinfo")
else:
print ("输入错误!!")
print ("\n 爬取完毕")
reactor.stop()
choice = input("是否需要爬取编制清单(y/n):") or "n"
print("您选择了:%s" % choice)
if choice == "y": # 判断num的值
print ("开始爬取编制清单...")
crawl()
reactor.run()
print ("爬取完毕")
elif choice == "n":
choice2 = input("请选择需要爬取的内容: \n 1: 爬取基础信息 \n 2: 爬取档案 \n 3: 爬取人员档案 \n") or "1"
print("您选择了:%s" % choice2)
crawl_detail(choice2)
reactor.run()
这个启动方案的问题是,原先-O xypt.xml
的命令行参数没有传进去,那么我们就要用settings
来进行设置了,在对应的spider脚本
(xxxx_spider.py
)中加上初始化内容,其中输出的内容是settings
的FEEDS来进行设定:
class XyptSpider(scrapy.Spider):
name = "xypt"
# 新增custom settings的部分
custom_settings = {
"FEEDS": {
'./infoResult.xml': {
'format': 'xml',
'overwrite':True,
},
},
}
其它的参数可以参考Settings来设定
auto-py-to-exe部分
auto-py-to-exe是封装了pyinstall的GUI,使用起来更方便一些,就决定用它了!
1. 安装
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple auto-py-to-e xe
$ auto-py-to-exe
#启动代码
2. 配置
主要是有几个配置点:
1. 将基础的目录配置进去,包括spiders
的上级目录,和对应的库文件
2. 把对应的python环境库文件的目录加入到path中
3. 打包成exe后,将scrapy.cfg拷贝到exe文件同目录下运行。查看运行的错误,如果有找不到的库,在hidden-import里面把库名写进去。
4. 反复尝试直到不再缺少库。
注意: 及时导出配置,避免关掉之后要重新配