本文开发环境:Python3.9
前言
最近公司有业务开展到爬美团下 大象
的商户信息
# 主要是这两个域名
allowed_domains = ["sale-pb.sankuai.com", 'crm.sankuai.com']
Pycharm在开发机器上采集占用太高了,于是想打包成exe
部署到服务器上跑
环境配置
包配置:
包名 | 版本 |
---|---|
Scrapy | 2.11.1 |
pyinstaller | 6.5.0 |
步骤
一、编写程序入口
参考官方文档:https://doc.scrapy.org/en/latest/topics/practices.html
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
运行
项目中读取的文件需要放到同一个运行目录中,我这里是category.json
和city.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)