调用博主最近登录时间
生活中的HYGGE
美团旗下大象商户数据爬虫1-Python将Scrapy程序打包成exe

美团旗下大象商户数据爬虫1-Python将Scrapy程序打包成exe

hygge
2024-04-01 / 0 评论 / 148 阅读 / 正在检测是否收录...
本文开发环境:Python3.9

前言

最近公司有业务开展到爬美团下 大象的商户信息

lugk1woj.png

# 主要是这两个域名
allowed_domains = ["sale-pb.sankuai.com", 'crm.sankuai.com']

Pycharm在开发机器上采集占用太高了,于是想打包成exe部署到服务器上跑

环境配置

包配置:

包名版本
Scrapy2.11.1
pyinstaller6.5.0

步骤

一、编写程序入口

参考官方文档:https://doc.scrapy.org/en/latest/topics/practices.html

lugk250a.png

sankuai/run.py

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
# 下面的包是项目中用到的包,根据自己的项目自行添加,也可以根据打包运行的报错信息,逐个添加
import js2xml
import os

settings = get_project_settings()
process = CrawlerProcess(settings)

process.crawl('store')  # 填入你需要运行的文件名
process.start()

二、数据保存

本来是想用FEED来保存数据,可以通过控制台来控制保存地址

sankuai/run.py

settings = get_project_settings()
settings.setdict({
    'FEED_FORMAT': 'csv',
    'FEED_URI': os.path.join(os.path.dirname(os.path.abspath(__file__)), 'data.csv')
}, priority="project")
process = CrawlerProcess(settings)

但是测试发现只会创建文件,并不会写入数据,这里没有解决 有后续了再贴

替代方案使用pipeline.py

sankuai/sankuai/pipeline.py

class SankuaiPipeline:
    def __init__(self):
        # data文件夹不存在则创建
        if not os.path.exists('./data'):
            os.mkdir('./data')

    def process_item(self, item, spider):
        with open('./data/' + item.get('cityName') + '.csv', 'a+', encoding='gbk', newline='') as f:
            writer = csv.writer(f)
            writer.writerow((item.get('cityName'), item.get('phone'), item.get('phone2')))
        return item

sankuai/sankuai/settings.py

# ...

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    "sankuai.pipelines.SankuaiPipeline": 300,
}

# ...

三、打包

打包执行命令:pyinstaller.exe .\run.py

打包后的文件会位于sankuai/dist/run/run.exe,通过cmd运行

luhxh68u.png

项目中读取的文件需要放到同一个运行目录中,我这里是category.jsoncity.json还有两个Cookie文件

四、运行

出现KeyError: 'Spider not found:爬虫名,可以将项目源码和打包程序放在一块,即打包时生成时的目录结构,不要改变,拷贝时连同项目整体拷贝,亲测有效。

打包时直接将sankuai目录压缩了,不然会出现其他问题,当然安全性没有保障(源码都泄露出去了)

公司自用就无所谓了

引用

1.python 将Scrapy项目打包成exe及注意事项 :https://www.cnblogs.com/zhengxianfa/p/16767965.html

2.【scrapy打包】使用pyinstaller将scrapy项目打包成独立可执行exe,及可能遇到的问题和解决方法:https://blog.csdn.net/qq_51543898/article/details/136846810

3.The application can not locate Python39.dll (126)找不到指定的模块。解决方法:https://blog.csdn.net/wushaoqiu2011/article/details/110182497

4.用Pyinstaller打包Scrapy项目问题解决!!!:https://pyqt5.blog.csdn.net/article/details/79017358

0

评论 (0)

取消