স্কাইরি প্রকল্পগুলি ডিবাগ করতে কীভাবে পাইচার্ম ব্যবহার করবেন


100

আমি পাইথন ২.7 এর সাথে স্কেরাপি 0.20 এ কাজ করছি। আমি পাই পাইচারমের একটি ভাল পাইথন ডিবাগার রয়েছে। আমি এটি ব্যবহার করে আমার স্কেরাপি মাকড়সা পরীক্ষা করতে চাই। কেউ দয়া করে কিভাবে এটি করতে জানেন?

আমি যা চেষ্টা করেছি

আসলে আমি স্ক্রিপ্ট হিসাবে মাকড়সা চালানোর চেষ্টা করেছি। ফলস্বরূপ, আমি সেই স্ক্রিপ্টটি তৈরি করেছি। তারপরে, আমি আমার স্কেরাপি প্রকল্পটি পাইচার্মে এর মতো মডেল হিসাবে যুক্ত করার চেষ্টা করেছি:
File->Setting->Project structure->Add content root.

তবে আমার আর কী করতে হবে তা আমি জানি না

উত্তর:


172

scrapyকমান্ড একটি পাইথন স্ক্রিপ্ট ভিতরে PyCharm থেকে এটা শুরু করতে পারেন যার মানে।

আপনি যখন চিকিত্সার বাইনারি ( which scrapy) পরীক্ষা করেন তখন আপনি লক্ষ্য করবেন যে এটি আসলে একটি অজগর স্ক্রিপ্ট:

#!/usr/bin/python

from scrapy.cmdline import execute
execute()

এর অর্থ হ'ল একটি কমান্ডও এর মতো scrapy crawl IcecatCrawlerকার্যকর করা যেতে পারে:python /Library/Python/2.7/site-packages/scrapy/cmdline.py crawl IcecatCrawler

Scrap.cmdline প্যাকেজটি অনুসন্ধান করার চেষ্টা করুন। আমার ক্ষেত্রে অবস্থানটি এখানে ছিল:/Library/Python/2.7/site-packages/scrapy/cmdline.py

স্ক্রিপ্ট হিসাবে স্ক্রিপ্টটি দিয়ে পাইচর্মের ভিতরে একটি রান / ডিবাগ কনফিগারেশন তৈরি করুন। স্ক্রিপি কমান্ড এবং মাকড়সা দিয়ে স্ক্রিপ্টের প্যারামিটারগুলি পূরণ করুন। এই ক্ষেত্রে crawl IcecatCrawler

এটার মত: পাইচার্ম রান / ডিবাগ কনফিগারেশন

আপনার ক্রলিং কোডের যে কোনও জায়গায় আপনার ব্রেকপয়েন্টগুলি রাখুন এবং এটি work কাজ করা উচিত ™


(<টাইপ 'ব্যাতিক্রম.সায়ানট্যাক্স এরর'>, সিনট্যাক্স এরির ("নন-ASCII অক্ষর '\\ xf3' ফাইল / লাইব্রেরি / প্যাথথন / 2.7 / সাইট-প্যাকেজ / স্কেরিপি / সিএমডলাইন.পিসি লাইন 1 এ, তবে কোনও এনকোডিং ঘোষিত হয়নি;
আইমন ফর্নিয়ার

4
দুর্দান্ত সমাধান! আমি স্ক্রেরি বাইনারি নিজেই বেশিরভাগ ক্ষেত্রেই ব্যবহার করার চেষ্টা করেছি: / ইউএসআর / বিন / স্কেরিপি একই পরামিতিগুলির সাথে স্ক্রিপ্ট হিসাবে বা অন্য কোনও স্কেরি কমান্ড যা আপনি ডিবাগ করতে চান এবং এটি ঠিক নিখুঁতভাবে কাজ করেছিল। নিশ্চিত করুন যে কার্যকারী ডিরেক্টরিটি আপনার স্কেরাপি প্রকল্পের মূলটির দিকে ইঙ্গিত করছে যেখানে scrap.cfg অবস্থিত।
নুর ওল্ফ

4
অ্যামোনফৌনিয়ার এটি দেখে মনে হচ্ছে আপনি একটি .pyc ফাইল চালানোর চেষ্টা করছেন। পরিবর্তে সংশ্লিষ্ট .py ফাইলটি চালান (স্ক্র্যাপি / সেমিডলাইন.পি)।
আরতুর গ্যাসপাড়

4
যদি আমি এটি করি তবে আমার সেটিংস মডিউলটি পাওয়া যায় না। ImportError: No module named settingsআমি দেখেছি যে ওয়ার্কিং ডিরেক্টরিটি প্রকল্প ডিরেক্টরি project এটি একটি জ্যাঙ্গো প্রকল্পের মধ্যে ব্যবহার করা হয়েছে। অন্য কেউ এই সমস্যায় হোঁচট খেয়েছে?
suntoch

6
কনফিগার করতে ভুলবেন না Working directory, অন্যথায় ত্রুটি no active project, Unknown command: crawl, Use "scrapy" to see available commands, Process finished with exit code 2
ঘটবে

108

আপনার কেবল এটি করা দরকার।

আপনার প্রকল্পের ক্রলার ফোল্ডারে পাইথন ফাইল তৈরি করুন। আমি main.py.

  • প্রকল্প
    • হামাগুড়ি
      • হামাগুড়ি
        • মাকড়সা
        • ...
      • main.py
      • scrap.cfg

আপনার মেইনপিপি এর ভিতরে এই কোডটি নীচে রাখুন।

from scrapy import cmdline    
cmdline.execute("scrapy crawl spider".split())

এবং আপনার মেইন.পি চালানোর জন্য আপনাকে "রান কনফিগারেশন" তৈরি করতে হবে।

এটি করা, আপনি যদি নিজের কোডটিতে ব্রেকপয়েন্ট রাখেন তবে এটি সেখানেই থামবে।


4
এটি একটি দুর্দান্ত সমাধান।
অ্যারিস্টটল

4
এই পদ্ধতিটি আরও কার্যকর।
wyx

4
এই আমার জীবন বাঁচায়! ধন্যবাদ!
zsljulius

6
আপনি বিভিন্ন মাকড়সার জন্য একাধিক মৃত্যুদন্ড কার্যকর করতে চান, সুতরাং আপনার রান কনফিগারেশনের যুক্তি হিসাবে মাকড়সার নামটি গ্রহণ করুন। তারপরে sys spider = sys.argv [1] cmdline.execute ("স্ক্রেরি ক্রল করুন {}"। ফর্ম্যাট (মাকড়সা) .স্প্লিট ())
মাইগুয়েলফগ

4
এটি আপনার সিভিএস এ সঞ্চয় করার সবচেয়ে ভাল উপায় এটি করার সবচেয়ে স্পষ্টতম এবং দ্রুততম উপায়।
হোসে টমসের টোকিনো

26

2018.1 হিসাবে এটি অনেক সহজ হয়ে গেছে। আপনি এখন Module nameআপনার প্রকল্পের মধ্যে নির্বাচন করতে পারেন Run/Debug Configuration। এটিকে scrapy.cmdlineএবং Working directoryস্ক্র্যাপি প্রকল্পের মূল ডায়ারে সেট করুন ( settings.pyএটির সাথে একটি)।

তাই ভালো:

পাইচার্ম স্কেরাপির ডিবাগ কনফিগারেশন

এখন আপনি আপনার কোডটি ডিবাগ করতে ব্রেকপয়েন্টগুলি যুক্ত করতে পারেন।


8

আমি পাইথন ৩.০.০ এর সাথে একটি ভার্চুয়ালেনভের স্ক্র্যাপি চালাচ্ছি এবং /path_to_project_env/env/bin/scrapyআমার জন্য সমস্যাটি সমাধানের জন্য "স্ক্রিপ্ট" পরামিতি সেট করছি।


আমি এই কাজগুলিতে অবাক হয়েছি, আমি ভেবেছিলাম যে অজগর 3
ইউজার 1592380

4
ধন্যবাদ, এটি পাইথন ৩.৫ এবং ভার্চুয়ালেনভের সাথে কাজ করেছে। "স্ক্রিপ্ট" হিসাবে @rioted বলেছেন এবং "কার্যনির্বাহী ডিরেক্টরি" সেট করা project/crawler/crawler, অর্থাৎ ডিরেক্টরিটি ধারণ করে __init__.py
এফিল

5

ইন্টেলিজ আইডিয়াও কাজ করে।

main.py তৈরি করুন :

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#coding=utf-8
import sys
from scrapy import cmdline
def main(name):
    if name:
        cmdline.execute(name.split())



if __name__ == '__main__':
    print('[*] beginning main thread')
    name = "scrapy crawl stack"
    #name = "scrapy crawl spa"
    main(name)
    print('[*] main thread exited')
    print('main stop====================================================')

নীচে দেখান:

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন


3

গৃহীত উত্তরে কিছুটা যুক্ত করতে, প্রায় এক ঘন্টা পরে আমি জানতে পেলাম যে ড্রপডাউন তালিকা থেকে (আইকন সরঞ্জামদণ্ডের কেন্দ্রের নিকটবর্তী) সঠিক রান কনফিগারেশনটি নির্বাচন করতে হয়েছে, তারপরে এটির কাজ করতে ডিবাগ বোতামটি ক্লিক করুন। আশাকরি এটা সাহায্য করবে!


2

আমি পাইচার্মও ব্যবহার করছি, তবে আমি এর বিল্ট-ইন ডিবাগিং বৈশিষ্ট্যগুলি ব্যবহার করছি না।

ডিবাগিংয়ের জন্য আমি ব্যবহার করছি ipdb। আমি যে import ipdb; ipdb.set_trace()কোনও লাইনে সন্নিবেশ করতে একটি কীবোর্ড শর্টকাট সেট আপ করেছি আমি চাই ব্রেক ব্রেকটি ঘটুক।

তারপরে আমি nপরবর্তী বিবৃতিটি কার্যকর করতে টাইপ করতে পারি , sকোনও ফাংশনে পদক্ষেপ নিতে, কোনও বস্তুর নাম দেখতে তার মান দেখতে টাইপ cকরতে পারি , কার্যকর প্রয়োগের পরিবেশ পরিবর্তন করতে পারি , কার্যকর করতে চালিয়ে যেতে টাইপ করতে পারি ...

এটি খুব নমনীয়, পাইচার্ম ব্যতীত অন্য পরিবেশে কাজ করে, যেখানে আপনি কার্যকর করার পরিবেশ নিয়ন্ত্রণ করেন না।

শুধু আপনার ভার্চুয়াল পরিবেশে টাইপ pip install ipdbএবং স্থান import ipdb; ipdb.set_trace()একটি লাইন যেখানে আপনি সঞ্চালনের বিরাম করতে চান।



0

আমি এই সহজ স্ক্রিপ্ট ব্যবহার:

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

process = CrawlerProcess(get_project_settings())

process.crawl('your_spider_name')
process.start()

0

@ রডরিগো উত্তরটির সংস্করণ প্রসারিত করে আমি এই স্ক্রিপ্টটি যুক্ত করেছি এবং এখন আমি স্ট্রিংয়ের পরিবর্তে কনফিগারেশন থেকে মাকড়সার নামটি সেট করতে পারি।

import sys
from scrapy import cmdline

cmdline.execute(f"scrapy crawl {sys.argv[1]}".split())
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.