フロントます。https://www.cnblogs.com/luocodes/p/11827850.html
最後にscrapyに真の単一のファイルにパッケージ化する方法、問題を解決します
夜の時間を費やし、急に今日インスピレーションを得ました
エラー解析
Scrapy.cfgはあなたが何のエラー---爬虫類を見つけません、実行可能ファイルと一緒にファイルを入れていないだろう
その理由は、与えられています
1.scrapy.cfgファイルは、実行可能ファイルに入りません
2.scrapy scrapy.cfgファイルディレクトリを読み取れません
質問1
pyInstallerのは、一時的なファイルシステムに実行可能ファイルを抽出する操作をしています
私たちは、だから最後ものの中に含まれる文書の私達のパッケージを理解することができるようになりますディレクトリの実行可能ファイルでそれを見つける必要があります
我々はstart.pyプログラムで遅延を設定する必要があるので、問題は、実行可能ファイルが完成し稼働している時はいつでも、それが生成する一時ファイルが削除されます、もあります
プログラムが終了していないとして、一時ファイルも、私たちが見る助けに保持されます
#- * -コーディング:UTF-8 - * - から scrapy.cmdlineのインポート実行 から scrapy.utils.pythonの輸入garbage_collect から scrapy.crawler 輸入CrawlerProcess から scrapy.utils.project 輸入get_project_settings #インポートrobotparserの インポートのOS インポートsysの インポート時 のインポートscrapy.spiderloader 輸入scrapy.statscollectorsの 輸入scrapy.logformatterの 輸入scrapy.dupefiltersは インポートscrapy.squeuesを 輸入scrapy.extensions.spiderstateの 輸入scrapy.extensions.corestats 輸入scrapy.extensions.telnetの 輸入scrapy.extensions.logstats 輸入scrapy.extensions.memusage 輸入scrapy.extensions.memdebug 輸入scrapy.extensions.feedexport 輸入scrapy.extensions.closespiderの 輸入scrapy .extensions.debugの インポートscrapy.extensions.httpcache 輸入scrapy.extensions.statsmailerの 輸入scrapy.extensions.throttle 輸入scrapy.core.scheduler 輸入scrapy.core.engine 輸入scrapy.core.scraper 輸入scrapy.core.spidermwの 輸入scrapy.core.downloader 輸入scrapy.downloadermiddlewares.statsは インポートscrapy.downloadermiddlewares.httpcache 輸入scrapy.downloadermiddlewares.cookiesが インポートscrapy.downloadermiddlewares.useragent 輸入scrapy.downloadermiddlewares.httpproxy 輸入scrapy.downloadermiddlewares.ajaxcrawlの 輸入scrapy.downloadermiddlewares.chunked 輸入scrapy.downloadermiddlewares.decompressionの インポートscrapyを.downloadermiddlewares.defaultheadersは インポートscrapy.downloadermiddlewares.downloadtimeout 輸入scrapy.downloadermiddlewares.httpauthの インポートをscrapy.downloadermiddlewares.httpcompressionの インポートscrapy.downloadermiddlewares.redirect 輸入scrapy.downloadermiddlewares.retryの 輸入scrapy.downloadermiddlewares.robotstxt 輸入scrapy.spidermiddlewares.depth 輸入scrapy.spidermiddlewares.httperror 輸入scrapy.spidermiddlewares.offsite 輸入scrapy.spidermiddlewares.refererの 輸入scrapy.spidermiddlewares.urllength 輸入scrapy.pipelines 輸入scrapy.core.downloader.handlers.http 輸入scrapy.core.downloader.contextfactory プリント(のsys.path [0]) プリント(sys.argvの[0]) 印刷(os.path.dirname(os.path.realpath(sys.executable))) プリント(os.path.dirname(os.path.realpath(sys.argvの[0]))) CFG = os.path.join(os.path.split(のsys.path [0])[0]、" scrapy.cfg " ) プリント(CFG) time.sleep( 10 ) プロセス = CrawlerProcess(get_project_settings()) #「SK」はプロジェクトのクモの1つの名前です。 process.crawl(' biqubao_spider '、ドメイン= ' biqubao.com ' ) process.start() #クロールが終了するまでスクリプトがここにブロックします。
だけしようとした後、この機能をのsys.pathそれは一時ファイルの場所を取得することです。
私は、後の一時ディレクトリにこの変数がscrapy.cfg導出されている場所をCFG
次のように生成された一時ファイル:
一時ファイルは、私たちがテストを継続し、CFGが含まれ、一時ファイルにstart.pyファイルを実行し、正常な動作があることがわかりました
問題はscrapy生成cfgファイルを読み取られないように、
質問2
それを読むためにscrapyのcfgファイルを作成するには?
デバッグの後、私は、関数scrapyは、CFGファイルのパスを読んでい
#scrapy \ utilsの\ conf.py
デフ get_sources(use_closest = 真): XDG_CONFIG_HOME = os.environ.get(' XDG_CONFIG_HOME ')または\ たければ、os.path.expantion(' 〜/ .configを' ) ソース = [ ' /etc/scrapy.cfg '、R ' C:\ scrapy \ scrapy.cfg ' 、 XDG_CONFIG_HOME + ' /scrapy.cfg ' 、 たければ、os.path.expantion(' 〜/ .scrapy.cfg ' )] の場合use_closest: sources.append(closest_scrapy_cfg()) リターン源
機能はソースCFGファイルパスのアレイであります
問題をテストした後、我々は、我々は、単一のファイルを実行し、この時間は、主導scrapyの読みではなく一時ファイルのCFGの単一ファイル・パスの下のcfgだと思います
ソースの実行が適切にCFGファイルに一時ファイルを読むことができるようになります後だけに生成された単一のファイルを追加し、この時間はそれほど
デフ get_sources(use_closest = 真): XDG_CONFIG_HOME = os.environ.get(' XDG_CONFIG_HOME ')または\ たければ、os.path.expantion(' 〜/ .configを' ) ソース = [ ' /etc/scrapy.cfg '、R ' C:\ scrapy \ scrapy.cfg ' 、 XDG_CONFIG_HOME + ' /scrapy.cfg ' 、 たければ、os.path.expantion(' 〜/ .scrapy.cfg ')、os.path.join(os.path.split(のsys.path [0])[0]、" scrapy.cfg " )] の場合use_closest: sources.append(closest_scrapy_cfg()) リターン源
再パッケージ化、単一の実行可能ファイルがアップ与えられません動きました!