运维系列&AI系列&Lenovo-G双系统系列(前传-装之前搜索的):Scrapy爬虫的打包Auto-py-to-exe/Pyinstall




Scrapy爬虫的打包Auto-py-to-exe/Pyinstall

前言

朋友托了我写了个小爬虫,然后写成之后老是要在我这儿跑,交付不了给朋友。项目太小,也不好用scrapyd托管在服务器。找了找有pyinstallAuto-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)中加上初始化内容,其中输出的内容是settingsFEEDS来进行设定:

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. 反复尝试直到不再缺少库。

注意: 及时导出配置,避免关掉之后要重新配







amuro_ray027

Scrapy爬虫的打包Auto-py-to-exe/Pyinstall

posted @ 2024-09-02 10:54  坦笑&&life  阅读(2)  评论(0编辑  收藏  举报  来源