Το Scrapy μπαίνει συχνά στο «κουτί» με τα εργαλεία που λένε ότι «δεν τα βγάζουν πέρα με τα σύγχρονα websites», επειδή δεν εκτελεί JavaScript. Μόνο που αυτή η φήμη είναι κάπως ανάποδη. Το ότι δεν κάνει render τη σελίδα είναι ακριβώς η λογική του εργαλείου, και μόλις δεις αυτή τη λογική στην πράξη, σταματά να μοιάζει με μειονέκτημα.
Το επιβεβαίωσα και ο ίδιος, σε μία μόνο εκτέλεση. Έστησα έναν δοκιμαστικό κατάλογο που αποδίδεται με JavaScript, έδειξα το Scrapy στη σελίδα που θα έβλεπε ένας browser και πήρα πίσω 0 product cards. Μετά, κατεύθυνα το ίδιο spider στο JSON endpoint που καλούσε αθόρυβα η σελίδα στο παρασκήνιο και πήρα 8/8 στοιχεία, καθαρά και χωρίς θόρυβο. Ίδιο εργαλείο, ίδια συνεδρία, τελείως διαφορετικό αποτέλεσμα — και η απόσταση ανάμεσα σε αυτούς τους δύο αριθμούς είναι το βασικό θέμα αυτής της αξιολόγησης.
Τι είναι πραγματικά το Scrapy — και τι δεν είναι

Το Scrapy είναι ένα Python framework για crawling ιστοσελίδων και εξαγωγή δομημένων δεδομένων. Αυτή είναι και η επίσημη διατύπωση των maintainers στο overview docs, και αφού το χρησιμοποίησα, μπορώ να πω ότι το περιγράφει σωστά — χωρίς υπερβολές marketing. Είναι αρκετά παλιό και αρκετά καθιερωμένο ώστε να είναι σχεδόν η αυτονόητη απάντηση όταν ένας Python developer ρωτά με τι κάνουν σοβαρό scraping οι επαγγελματίες, και το repo το επιβεβαιώνει: περίπου 62.981 GitHub stars έως τις 2026-07-07 (scrapy/scrapy), με 11.773 forks και 590 open issues την ίδια μέρα. BSD-3-Clause άδεια, Python 3.10 ή νεότερη, και η έκδοση που δοκίμασα ήταν η 2.17.0, η οποία βγήκε το ίδιο πρωί που έτρεξα αυτά τα tests — άρα εδώ δεν υπάρχει αστερίσκος για «παλιά έκδοση».
Ακολουθεί η βασική γραμμή που το ξεχωρίζει από τα νεότερα AI-crawlers: το Scrapy δουλεύει μόνο με HTTP by default. Όχι browser. Όχι rendering engine. Κατεβάζει το HTML μέσω δικτύου, το δίνει σε έναν parser και σου επιτρέπει να τραβήξεις πεδία με CSS selectors ή XPath. Αν το πεις αυτό περιορισμό, λες μόνο τη μισή αλήθεια και χάνεις εντελώς τη φιλοσοφία του. Η λογική του Scrapy είναι ότι το να ανοίγεις headless Chrome για ένα συνηθισμένο scrape είναι συνήθως λάθος κίνηση — η πιο έξυπνη διαδρομή είναι να βρεις το data request που ήδη κάνει η σελίδα και να χτυπήσεις κατευθείαν αυτό.
Και δεν το προβάλλω εγώ πάνω στο εργαλείο. Η επίσημη ενότητα για dynamic content το λέει ξεκάθαρα: βρες και αναπαρήγαγε πρώτα το υποκείμενο data request, και χρησιμοποίησε headless browser μόνο ως εναλλακτική όταν αυτό δεν είναι πρακτικό. Οι περισσότεροι scrapers ανοίγουν πρώτα τον browser και δεν σκέφτονται ποτέ το API. Το Scrapy γυρίζει την προεπιλογή ανάποδα.
Βασικά χαρακτηριστικά και η σχεδιαστική επιλογή πίσω από το καθένα
Στο εσωτερικό του, το Scrapy είναι μια στοίβα από κομμάτια που σε αντιμετωπίζουν με μία βασική υπόθεση: ότι είσαι developer που θέλει έλεγχο, όχι wizard με ένα κλικ.
Spiders. Γράφεις μια κλάση, της δίνεις start URLs και ορίζεις ένα parse callback που επιστρέφει items ή ακολουθεί περισσότερα links. Αυτό θέλει περισσότερη δουλειά από ένα no-code extractor — οι κανόνες εξαγωγής είναι δική σου υπόθεση — αλλά σε αντάλλαγμα έχεις απόλυτο έλεγχο στο τι συλλέγεται και πού συνεχίζει το crawl.
Selectors. Το parsing βασίζεται στο parsel, το οποίο από κάτω χρησιμοποιεί lxml. Τα CSS και XPath είναι πρώτης τάξης εργαλεία, όχι πρόσθετα. Η βάση με lxml είναι ο λόγος που η επιλογή στοιχείων παραμένει γρήγορη και ο κώδικας εξαγωγής διαβάζεται σαν πρόθεση και όχι σαν μπερδεμένο string slicing.
Feed exports. Δείξε ένα spider σε ένα αρχείο και το Scrapy αποθηκεύει τα items σου σε JSON, JSON Lines, CSV ή XML χωρίς επιπλέον μηχανισμό από πάνω. Στη δική μου εκτέλεση, ένα static-catalog spider έβγαλε JSON και CSV χωρίς να γράψω ούτε μία γραμμή export code — το feed export κομμάτι είναι αληθινό και κάνει αυτό που υπόσχεται.
AutoThrottle και έλεγχοι crawling. Τα requests προγραμματίζονται ασύγχρονα πάνω στο Twisted, και παίρνεις concurrency caps, download delays, περιορισμούς βάθους, AutoThrottle για προσαρμοστικό rate-limiting και συμμόρφωση με robots.txt. Αυτοί είναι οι έλεγχοι που κρατούν ένα μεγάλο crawl από το να γίνει περιστατικό επιβάρυνσης server.
HTTP-only, ειπωμένο αλλιώς ως πλεονέκτημα. Όταν δεν υπάρχει browser, έχεις χαμηλή κατανάλωση μνήμης, υψηλό throughput και δεν χρειάζεται να συντηρείς rendering engine — αρκεί τα δεδομένα που θέλεις να είναι προσβάσιμα μέσω απλού HTTP. Και αυτό, πιο συχνά απ’ όσο νομίζει το browser-first στρατόπεδο, ισχύει.
Εγκατάσταση: η στοίβα εξαρτήσεων που κανείς δεν βάζει σε screenshot

Η εγκατάσταση δεν άφησε τίποτα αξιοσημείωτο, και για ένα framework αυτού του μεγέθους αξίζει να το πω καθαρά. Το pip install Scrapy==2.17.0 ολοκληρώθηκε χωρίς προβλήματα σε νέο virtual environment σε macOS arm64, κατεβάζοντας binary wheels, χωρίς να αρχίσει κάτι να μεταγλωττίζεται και να κολλάει. Δεν υπήρχε δράμα — και αυτό ακριβώς θέλεις.
Κοίτα όμως τι κατέβηκε μαζί του. Το scrapy version -v έδειξε το Scrapy 2.17.0 να τρέχει πάνω σε lxml 6.1.1, Twisted 26.4.0, pyOpenSSL 26.3.0 και cryptography 49.0.0, με parsel, cssselect και tldextract να συμπληρώνουν το πακέτο. Μιλάμε για κανονικό αποτύπωμα — για εξαρτήσεις ολόκληρου crawling framework, όχι για έναν απλό HTML parser σε ένα αρχείο. Σε αυτό το μηχάνημα υπήρχαν wheels για όλα και η εγκατάσταση έμεινε ανώδυνη. Σε άλλες περιπτώσεις, τα επίσημα docs εξακολουθούν να προειδοποιούν για friction που εξαρτάται από την πλατφόρμα, και ιστορικά εκεί που «πονάει» περισσότερο είναι το cryptography και το Twisted, οπότε κράτα το στο μυαλό σου αν δουλεύεις σε πιο ασυνήθιστο setup. Εδώ η εγκατάσταση ήταν ομαλή· το μέγεθος της στοίβας όμως παραμένει κάτι που πρέπει να ξέρεις πριν δεσμευτείς, γιατί παίρνεις ένα framework και πληρώνεις το βάρος ενός framework.
Πρακτική δοκιμή: τι άντεξε

Μόλις εγκαταστάθηκε, η στατική διαδρομή κύλησε άψογα. Πλήρης ανάκτηση, τίποτα χαμένο.
| Δοκιμή | Αποτέλεσμα | Χρόνος |
|---|---|---|
| Τοπικός στατικός κατάλογος + pagination | 12/12 προϊόντα | 0.557s |
| CSV export στατικού καταλόγου | 12 γραμμές γραμμένες | (ίδια εκτέλεση) |
| Εξαγωγή άρθρου | τίτλος + 3/3 body παραγράφοι | 0.416s |
| Crawl graph, DEPTH_LIMIT=2 | 11 σελίδες στα βάθη 0/1/2 | 0.904s |
| Τοπική σελίδα 500 | status 500 καταγράφηκε, χωρίς crash | 0.424s |
| Books to Scrape (δημόσιο) | 20 προϊόντα | 2.053s |
| Quotes to Scrape spider (δημόσιο) | 12 quote items | 3.465s |
Το spider του static καταλόγου πέρασε από τη σελίδα ένα στη σελίδα δύο και έπιασε 12/12 αναμενόμενες εγγραφές, ενώ στη συνέχεια τις έγραψε σε JSON και CSV στην ίδια εκτέλεση. Το fixture άρθρου αξίζει ιδιαίτερη προσοχή. Το Scrapy δεν προσπάθησε να «καθαρίσει» αυτόματα τη σελίδα και να τη μετατρέψει σε τακτοποιημένο Markdown — αντίθετα, μου επέτρεψε να στοχεύσω πεδία article με explicit selectors και να κρατήσω το nav και footer text σε ξεχωριστά πεδία, οπότε πήρα 3/3 body παραγράφους με τα boilerplate κείμενα απομονωμένα και όχι ανακατεμένα στην έξοδο. Αυτό είναι και το trade-off: γράφεις τα selectors και παίρνεις ακριβώς αυτό που ζήτησες, τίποτα παραπάνω.
Ο έλεγχος του crawl λειτούργησε σωστά σε μικρή κλίμακα. Με DEPTH_LIMIT=2, μικρό download delay, per-domain concurrency και ενεργό robots.txt, το crawl graph είδε 11 σελίδες στα βάθη 0, 1 και 2, και το βάθος υπολογίστηκε σωστά. Η διαχείριση αποτυχίας ήταν εξίσου ομαλή. Η σκόπιμη σελίδα 500 επέστρεψε ως δομημένο item με το status 500 να εμφανίζεται μέσω handle_httpstatus_list — χωρίς exception, χωρίς να σταματήσει η εκτέλεση. Το Scrapy αντιμετωπίζει ένα error status ως κάτι που χειρίζεσαι μέσα στη λογική του spider, όχι ως ξαφνικό χτύπημα που ρίχνει όλο το crawl.
Πρακτική δοκιμή: το τείχος της JavaScript και η πόρτα δίπλα του

Τώρα περνάμε στο αποτέλεσμα γύρω από το οποίο χτίστηκε αυτή η αξιολόγηση.
Έδειξα τον HTTP fetcher του Scrapy σε ένα catalog fixture που αποδίδεται με JavaScript. Κατέβασε το source HTML, βρήκε 0 .product-card nodes και προχώρησε — επειδή δεν εκτέλεσε ποτέ το script που θα ζωγράφιζε αυτά τα cards. Η δημόσια σελίδα Quotes to Scrape JS page έδειξε την ίδια ιστορία: 0 rendered quote nodes. Αν σταματούσες εκεί, θα έγραφες το Scrapy ως ακατάλληλο για οτιδήποτε φτιάχτηκε αυτή τη δεκαετία.
Μην σταματάς εκεί. Αυτό το JS catalog τροφοδοτούνταν στο παρασκήνιο από ένα JSON API, όπως συμβαίνει στα περισσότερα παρόμοια sites. Έδειξα το ίδιο Scrapy spider σε εκείνο το endpoint και πήρα 8/8 προϊόντα σε 0.416s — χωρίς browser, χωρίς rendering, μόνο ένα request στο URL που ήδη καλούσε η σελίδα και parsing του JSON που επέστρεψε.
Αυτή η παράθεση δίπλα-δίπλα είναι η φιλοσοφία «αναπαράγω το request» σε μικρογραφία. Η rendered σελίδα είναι απλώς ένα δόλωμα· τα δεδομένα βρίσκονταν πίσω από ένα API όλη την ώρα, και ο σχεδιασμός του Scrapy σε σπρώχνει να πας κατευθείαν εκεί αντί να πληρώσεις έναν headless browser για να κάθεται να παρακολουθεί μια σελίδα να χτίζεται. Είναι πιο γρήγορο, πιο ελαφρύ και σπάει λιγότερο — ένα API contract είναι σαφώς πιο σταθερό από ένα σωρό client-side DOM. Το μειονέκτημα είναι ότι θέλει χειροκίνητη δουλειά. Πρέπει να ανοίξεις το network tab, να βρεις το request και να αναπαράγεις μόνος σου headers και params. Το Scrapy δεν θα ανακαλύψει το API για σένα· απλώς κάνει το χτύπημά του πανεύκολο μόλις το βρεις.
Δύο όρια, καθαρά ειπωμένα. Όταν πραγματικά δεν υπάρχει υποκείμενο request για αναπαραγωγή — όταν τα δεδομένα είναι «ψημένα» από client-side rendering χωρίς κανένα API από πίσω — το Scrapy χρειάζεται headless-browser integration που θα το συνδέσεις εσύ, και δεν δοκίμασα αυτό το μονοπάτι σε αυτή την αναφορά. Επίσης, όλα τα παραπάνω εκτελέστηκαν σε μικρά fixtures και δημόσιες demo σελίδες. Δεν έτρεξα crawl 100 έως 1.000 σελίδων, άρα δεν κάνω καμία δήλωση για memory, throughput ή retry συμπεριφορά σε κλίμακα — ο ασύγχρονος πυρήνας και οι έλεγχοι crawling είναι καλά σημάδια, αλλά ένα σημάδι δεν είναι μέτρηση.
Πλεονεκτήματα και μειονεκτήματα
Πλεονεκτήματα:
- Ο HTTP-only σχεδιασμός είναι γρήγορος και ελαφρύς — 12/12 στατική ανάκτηση σε περίπου μισό δευτερόλεπτο, 8/8 από JSON API σε 0.416s, χωρίς browser overhead.
- Η προσέγγιση «αναπαράγω το request» αποδίδει πραγματικά: μια JS σελίδα που έδινε 0, παρέδωσε και τα 8 στοιχεία μέσω του API της.
- Τα CSS και XPath selectors με βάση το
lxmlκρατούν τον κώδικα εξαγωγής καθαρό και γρήγορο. - Feed exports σε JSON/CSV/XML χωρίς να χρειάζεται να γράψεις μηχανισμό εξαγωγής.
- Ρητός χειρισμός σφαλμάτων — ένα 500 επιστρέφει ως status που το πιάνεις, όχι ως crash.
- Ώριμοι έλεγχοι crawling: concurrency, delays, depth limits, AutoThrottle, robots.txt.
- Επιτρεπτική άδεια BSD-3-Clause· καθαρή εγκατάσταση σε σύγχρονο μηχάνημα.
Μειονεκτήματα:
- Δεν αποδίδει JavaScript by design — 0 nodes σε client-rendered σελίδα μέχρι να βρεις εσύ το API.
- Η εύρεση του υποκείμενου request γίνεται χειροκίνητα· το Scrapy δεν θα σου δείξει το endpoint.
- Αρκετά μεγάλη στοίβα εξαρτήσεων (Twisted, lxml, cryptography, pyOpenSSL, parsel, tldextract) — ομαλή εδώ, αλλά ιστορικά σημείο τριβής σε ασυνήθιστες πλατφόρμες.
- Περισσότερος κώδικας από no-code ή auto-extraction εργαλεία· τα spiders είναι δική σου ευθύνη να τα γράψεις και να τα συντηρείς.
- Η δοκιμή κάλυψε μικρά fixtures και demo sites, όχι μεγάλα crawls — η αξιοπιστία σε κλίμακα δεν αποδείχθηκε σε αυτή την εκτέλεση.
Για ποιον είναι και ποιος καλύτερα να το προσπεράσει

Το Scrapy είναι για developers που θέλουν έλεγχο σε επίπεδο κώδικα και σκέφτονται σε requests, όχι σε σελίδες. Αν η πρώτη σου σκέψη όταν βλέπεις ένα αργό JavaScript site είναι «κάπου εδώ υπάρχει ένα API», τότε αυτό το εργαλείο έχει φτιαχτεί ακριβώς για αυτό το ένστικτο. Επιβραβεύει όσους νιώθουν άνετα να γράφουν selectors, να διαβάζουν το network tab και να αναλαμβάνουν πλήρως τη λογική εξαγωγής από άκρη σε άκρη. Για στατικά sites, καταλόγους με pagination και οτιδήποτε στηρίζεται σε ανακαλύψιμο JSON endpoint, είναι γρήγορο και ακριβές.
Καλύτερα να το προσπεράσεις — ή τουλάχιστον να το συνδυάσεις με κάτι άλλο — αν το να γράφεις και να συντηρείς spider code δεν είναι ο τρόπος που θέλεις να περνάς τον χρόνο σου, ή αν οι στόχοι σου αποδίδουν τα δεδομένα αποκλειστικά client-side χωρίς αναπαράξιμο request και δεν θέλεις να συνδέσεις μόνος σου headless browser. Και αν το όνειρο ήταν να δείχνεις ένα εργαλείο σε ένα URL και να παίρνεις καθαρό δομημένο output χωρίς να γράφεις extraction rules, αυτό δεν ήταν ποτέ δουλειά του Scrapy — και ποτέ δεν προσποιήθηκε το αντίθετο.
Εναλλακτικές και πού ταιριάζει το Thunderbit
Δοκίμασε το Thunderbit για εξαγωγή web δεδομένων
Ξεκίνα από το τι αναλαμβάνεις πραγματικά: ένα δωρεάν, open-source framework που το τρέχεις και το συντηρείς εσύ. Εσύ είσαι υπεύθυνος για τα spiders, τη στοίβα εξαρτήσεων και τη δουλειά του να βρίσκεις το data request κάθε site. Σε αντάλλαγμα δεν πληρώνεις ανά request, κρατάς τα πάντα in-house και έχεις απόλυτο έλεγχο. Για πολλές ομάδες αυτό είναι η σωστή επιλογή, και αυτή η αξιολόγηση δεν γράφτηκε για να τις μεταπείσει.
Η αντιστάθμιση βρίσκεται στο πρόβλημα του rendering και της δυναμικής φόρτωσης της σελίδας, και η απάντηση του Scrapy είναι ότι το λύνεις εσύ: βρίσκεις το API, αναπαράγεις το request και χειρίζεσαι την περίπτωση χωρίς API συνδέοντας μόνος σου browser. Ένα managed AI scraping API αφαιρεί αυτό το στρώμα από πάνω σου. Εκεί ακριβώς τοποθετείται το Thunderbit για τεχνικούς αναγνώστες — ένα AI scraping API μαζί με MCP server και CLI, όχι η browser extension που χρησιμοποιεί το κοινό πωλήσεων και ops. Το POST /distill μετατρέπει μια σελίδα σε καθαρό, LLM-ready Markdown· το POST /extract επιστρέφει δομημένο JSON βάσει schema που ορίζεις εσύ· και τα δύο διαχειρίζονται JavaScript rendering, anti-bot και dynamic content από την πλευρά του server — συμπεριλαμβανομένης της client-rendered περίπτωσης όπου το Scrapy σου λέει να στραφείς σε browser. Υπάρχει MCP server για AI agents και coding assistants (με δωρεάν thunderbit_suggest_fields για να οριοθετήσεις μια σελίδα πριν ξοδέψεις οτιδήποτε), και CLI μέσω npx @thunderbit/thunderbit-cli για terminal, CI ή cron δουλειές.
Η διαφορά δεν είναι η ποιότητα, είναι η ιδιοκτησία. Το Scrapy είναι ένα ξεκάθαρο engineering framework: εσύ συντηρείς το spider, το pipeline και τη στρατηγική για JS, και παίρνεις απόλυτο έλεγχο με μηδενικό κόστος ανά κλήση. Η στοίβα του Thunderbit αναλαμβάνει ως managed service το layer του render και της εξαγωγής, ώστε να γλιτώνεις το ψάξιμο στο network tab και να πληρώνεις ανά κλήση. Μικρή κλίμακα, code-first λογική και θέλεις να κατέχεις κάθε βήμα; Ο έλεγχος του Scrapy ταιριάζει καλύτερα. Θέλεις να κλιμακωθείς σε εκατό sites και δεν θες να αναπαράγεις χειροκίνητα ένα request ανά site; Η managed διαδρομή αφαιρεί ολόκληρη αυτή την κατηγορία εργασίας.
Για το ευρύτερο πεδίο, αυτά τα benchmark άρθρα καλύπτουν τους γείτονες: τη συνολική σύγκριση open-source scrapers, την αξιολόγηση του no-browser Go crawler του Colly και την αξιολόγηση του adaptive-selector του Scrapling.
Συμπέρασμα
Να χρησιμοποιήσεις το Scrapy; Ναι — αν είσαι developer που θέλει έλεγχο και ασπάζεσαι το σκεπτικό: μην αποδίδεις τη σελίδα, βρες το request που κρύβεται από πίσω. Στις δοκιμές, αυτή η φιλοσοφία απέδωσε ακριβώς όπως υπόσχεται. Ένα JavaScript catalog έδωσε στον HTTP fetcher 0 cards· το JSON API που το τροφοδοτούσε παρέδωσε και τα 8 στοιχεία στο ίδιο spider. Η στατική εξαγωγή έπιασε 12/12, οι selectors του άρθρου κράτησαν 3/3 παραγράφους καθαρές από boilerplate, το crawl graph σεβάστηκε το depth limit σε 11 σελίδες και ένα 500 γύρισε ως handled status αντί για crash.
Όμως πρέπει να ζυγίσεις σωστά τους ισχυρισμούς. Το Scrapy δεν αποδίδει JavaScript και δεν θα βρει εκείνο το API για σένα — αυτή η κίνηση είναι δική σου. Η στοίβα εξαρτήσεων είναι αυτή ενός πλήρους framework και μπορεί να δημιουργήσει προβλήματα σε περίεργες πλατφόρμες, παρότι εδώ ήταν καθαρή. Και δοκίμασα fixtures και demo pages, όχι ένα crawl χιλίων σελίδων, οπότε η ιστορία για κλίμακα είναι πολλά υποσχόμενη αλλά όχι αποδεδειγμένη σε αυτή την εκτέλεση. Μέσα σε αυτά τα όρια, το Scrapy είναι το εργαλείο που υπηρετεί καλύτερα μια ήσυχα ριζοσπαστική ιδέα: ο πιο γρήγορος δρόμος μέσα από μια web σελίδα συνήθως δεν περνά καθόλου από τη web σελίδα.
Δοκίμασε το Thunderbit για εξαγωγή web δεδομένων Get Started Free
Συχνές ερωτήσεις
Μπορεί το Scrapy να κάνει scrape σε σελίδες που αποδίδονται με JavaScript;
Όχι με τον προεπιλεγμένο HTTP fetcher του — επέστρεψε 0 nodes τόσο σε ένα JS fixture όσο και στη δημόσια σελίδα Quotes JS, επειδή κατεβάζει HTML χωρίς να εκτελεί browser. Η προτεινόμενη διαδρομή είναι να βρεις το υποκείμενο data request που κάνει η σελίδα και να χτυπήσεις αυτό κατευθείαν· στη δική μου δοκιμή, το JSON API πίσω από ένα JS catalog έδωσε και τα 8 στοιχεία. Για σελίδες χωρίς αναπαράξιμο request, συνδέεις εσύ έναν headless browser.
Τι σημαίνει πρακτικά το «αναπαράγω το request»;
Οι περισσότερες δυναμικές σελίδες φορτώνουν τα δεδομένα τους από ένα JSON API στο παρασκήνιο και μετά τα αποδίδουν client-side. Αντί να ανοίγεις browser για να το βλέπεις να συμβαίνει, ανοίγεις το network tab, βρίσκεις εκείνο το API call και δείχνεις το Scrapy κατευθείαν εκεί. Είναι πιο γρήγορο και πιο σταθερό από το rendering — ένα API contract σπάει λιγότερο συχνά από ένα DOM — αλλά θέλει χειροκίνητη δουλειά και το Scrapy δεν θα εντοπίσει το endpoint για σένα.
Είναι δύσκολο να εγκατασταθεί το Scrapy;
Για μένα ήταν καθαρό — το pip install Scrapy==2.17.0 τελείωσε χωρίς σφάλματα μεταγλώττισης σε νέο venv σε macOS, χρησιμοποιώντας binary wheels. Όμως φέρνει μαζί του μια αρκετά μεγάλη στοίβα (Twisted, lxml, cryptography, pyOpenSSL, parsel, tldextract), και τα επίσημα docs εξακολουθούν να προειδοποιούν για platform-specific friction σε ορισμένα συστήματα, άρα υπολόγισε αυτό το ενδεχόμενο αν είσαι σε κάτι ασυνήθιστο.
Ποια format εξαγωγής υποστηρίζει το Scrapy;
Τα feed exports καλύπτουν out of the box JSON, JSON Lines, CSV και XML — δείχνεις ένα spider σε ένα αρχείο και κάνει serialize τα items χωρίς επιπλέον κώδικα. Στη δική μου δοκιμή, ένα spider παρήγαγε τόσο JSON όσο και CSV σε ένα μόνο πέρασμα. Σημείωσε ότι εξάγει τα πεδία που όρισες· δεν μετατρέπει αυτόματα μια σελίδα σε Markdown.
Είναι το Scrapy δωρεάν για εμπορική χρήση;
Είναι BSD-3-Clause, άρα επιτρεπτικό και φιλικό για εμπορική χρήση. Όπως πάντα, επιβεβαίωσε την τρέχουσα άδεια στο repo πριν βασιστείς πάνω του, και κράτα υπεύθυνες τις επιλογές σου σε user-agent, proxy και rate limits — η δυνατότητα δεν σημαίνει άδεια.


