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

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

时间:2024-09-02 10:54:48浏览次数:13  
标签:双系统 exe 系列 前传 py scrapy Scrapy print crawl

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

标签:双系统,exe,系列,前传,py,scrapy,Scrapy,print,crawl
From: https://blog.csdn.net/weixin_54626591/article/details/141813449

相关文章

  • PW系列WiFi墨水屏标签操作指导
    设备初始化向厂家获取一下信息:服务器地址(MQTT地址)操作账号操作账号绑定的(产品KEY)WiFi标签管理系统登录WiFi标签管理系统:http://192.144.234.153:8000/index测试账户:user1080密码:123456(仅限于测试使用)我们提供云平台和V5基站两种方式1、云平台登录需要和客......
  • 关于GD32F450ZG系列板卡对RS232发送数据前后不匹配
            先说一下问题,在Keil5开发环境下对板卡上的RS232串口进行配置,要求发送0x5A一笔数据,但实际在串口调试助手中收到0xEC0xF3两笔数据,前后发送的数据不匹配。    针对这个问题,对一下几点重新检查,并确保无误:    1、检查引脚使能情况;    ......
  • PHP转Go系列 | ThinkPHP与Gin框架之Redis延时消息队列技术实践
    大家好,我是码农先森。我们在某宝或某多多上抢购商品时,如果只是下了订单但没有进行实际的支付,那在订单页面会有一个支付倒计时,要是过了这个时间点那么订单便会自动取消。在这样的业务场景中,一般情况下就会使用到延时队列。通常在客户下单之后,就会将订单数据推送到延时队列中并且......
  • 【小程序系列】微信支付JAVA-sdk
    ......
  • 【愚公系列】《AIGC辅助软件开发》002-AI智能化编程助手:GitHub Copilot
    ......
  • FOC系列电机入门知识
     原文链接:https://**foc.c**Createdon:2024年9月1日*Author:13624*/#include"main.h"#include"foc.h"//帕克变换floatu_d;//d坐标系电压floatu_q;//q坐标系电压floattheta;//电角度//克拉克变换floatu_alpha;//floatu_beta;//......
  • 【JAVA系列】java命令注入科普
    名词科普原理科普注入科普原创medi0cr1tyMedi0cr1ty这里只讨论使用java执行命令的情况(Runtime/ProcessBuilder),结合之前挖过过的一些case或者群里见到过的case来讲。名词科普命令解释器shell:是一种软件程序(可视作一门编程语言的代码解释器),它接收用户在命令行界面......
  • unordered系列容器的实现
    1.unordered_set与unordered_map的结构我们知道STL中的unordered_set与unordered_map底层就是一个开散列的哈希表1.1unordered_set的结构我们知道unordered_set其实就是K模型,所以unordered_set容器对红黑树的封装如下: template<classk,classHash=Hashfunc<k>> cla......
  • 【运维系列】如何为日志开放安全策略
    网络中日志流量的典型组网如【图1】所示。通常,路由器、交换机、服务器等设备向日志主机发送Syslog日志信息使用UDP514端口。如果日志流经防火墙,需要在防火墙上开放安全策略。【图1】日志输出典型组网防火墙支持输出多种类型的日志。在输出日志信息到日志服务器时,部分日志......
  • 【运维系列】如何为HTTP、HTTPS和RESTCONF开放安全策略
    防火墙提供了简单易用的WebUI。用户从浏览器访问承载在防火墙上的HTTPServer,可以完成绝大部分的配置管理工作。缺省情况下,防火墙启用HTTPS服务,服务端口为8443,且不可修改。从浏览器发起的HTTP访问会被重定向到HTTPS。RESTCONF以HTTP协议的方法提供了NETCONF协议的核心功能,编程接......