Ich bin ziemlich neu zu scrapy, ich weiß, dass Elemente verwendet werden, um Scraped Daten zu füllen, aber ich kann nicht den Unterschied zwischen Artikel und Artikel Lader verstehen. Ich habe versucht, einige Beispielcodes zu lesen, sie haben Artikellader anstelle von Artikeln verwendet und ich kann nicht verstehen warum. Scrapy Dokumentation war nicht klar genug für mich. Kann jemand eine einfache Erklärung geben (besser mit Beispiel), wenn Artikellader verwendet werden und welche zusätzlichen Einrichtungen sie über Gegenstände bieten?Items vs Artikel Loader in scrapy
Antwort
Ich mag die offizielle Erklärung in der Dokumentation:
Artikel Lader bietet einen bequemen Mechanismus Artikel geschabt zum Bestücken. Obwohl Elemente mit ihrer eigenen wörterbuchähnlichen API gefüllt werden können, bieten Objektlader eine viel bequemere API für das Ausfüllen von einem Scraping-Prozess, indem einige allgemeine Aufgaben wie das Parsen der unverarbeiteten extrahierten Daten vor dem Zuweisen automatisiert werden.
Mit anderen Worten, Elemente bieten den Container von Scraped-Daten, während Element Loader den Mechanismus zum Füllen dieses Containers bereitstellen.
Letzter Absatz sollte Ihre Frage beantworten.
Artikellader sind großartig, da sie Ihnen erlauben, so viele Verarbeitungsabkürzungen zu haben und eine Menge Code wiederzuverwenden, um alles sauber, sauber und verständlich zu halten.
Vergleich Beispiel Fall. Lets sagen, dass wir diesen Artikel kratzen wollen:
def parse(self, response):
full_name = response.xpath("//div[contains(@class,'name')]/text()").extract()
# i.e. returns ugly ['John\n', '\n\t ', ' Snow']
item['full_name'] = ' '.join(i.strip() for i in full_name if i.strip())
bio = response.xpath("//div[contains(@class,'bio')]/text()").extract()
item['bio'] = ' '.join(i.strip() for i in full_name if i.strip())
age = response.xpath("//div[@class='age']/text()").extract_first(0)
item['age'] = int(age)
weight = response.xpath("//div[@class='weight']/text()").extract_first(0)
item['weight'] = int(age)
height = response.xpath("//div[@class='height']/text()").extract_first(0)
item['height'] = int(age)
return item
vs Artikel-Lader nähern:
# define once in items.py
from scrapy.loader.processors import Compose, MapCompose, Join, TakeFirst
clean_text = Compose(MapCompose(lambda v: v.strip()), Join())
to_int = Compose(TakeFirst(), int)
class MyItemLoader(ItemLoader):
default_item_class = MyItem
full_name_out = clean_text
bio_out = clean_text
age_out = to_int
weight_out = to_int
height_out = to_int
# parse as many different places and times as you want
def parse(self, response):
loader = MyItemLoader(selector=response)
loader.add_xpath('full_name', "//div[contains(@class,'name')]/text()")
loader.add_xpath('bio', "//div[contains(@class,'bio')]/text()")
loader.add_xpath('age', "//div[@class='age']/text()")
loader.add_xpath('weight', "//div[@class='weight']/text()")
loader.add_xpath('height', "//div[@class='height']/text()")
return loader.load_item()
Wenn Sie den Artikel sehen
class MyItem(Item):
full_name = Field()
bio = Field()
age = Field()
weight = Field()
height = Field()
Artikel nur Ansatz wie folgt aussehen würde Lader ist so viel sauberer und einfacher zu skalieren. Nehmen wir an, Sie haben 20 weitere Felder, von denen viele die gleiche Verarbeitungslogik haben, wäre ein Selbstmord ohne Item Loader. Artikel Loader sind super und du solltest sie benutzen!
- 1. Artikel Loader funktioniert nicht richtig in scrapy
- 2. In Scrapy, wie verschachtelte Artikel Loader ohne weitere 'add_xpath' Aufrufe
- 3. Scrapy Change Items Auftrag
- 4. Scrapy - ItemPipeline gibt keine Prozess Items ein
- 5. Mehrere Variablen gleichzeitig mit Scrapy Items zuweisen
- 6. Link Artikel hrefs in scrapy
- 7. scrapy ersten Artikel zurückgeben
- 8. scrapy Fehler Import: Kein Modul Artikel
- 9. Nested JSON Artikel mit scrapy
- 10. kann nicht scrapy Artikel serialisiert
- 11. Items ClickListener deaktivieren HighLight auf Artikel berühren
- 12. Protractor und klicken Sie Artikel für loader
- 13. Scrapy Vs Nutch
- 14. wie man Artikel laden in scrapy Schleife
- 15. Wie implementiert man verschachtelte Artikel in Scrapy?
- 16. Scrapy - Artikel speichern und neue URL analysieren
- 17. Scrapy mehr Anfragen und füllen einen Artikel
- 18. Scrapy Spider nicht Artikel Speicher freigeben
- 19. Stoppen Sie Scrapy nach N Artikel geschabt
- 20. schema.org - Blogposting vs Artikel
- 21. Scrapy: Vorschlag für mehrere Rücksendungen/Artikel zur Datenbank
- 22. Babel vs webpack babel-loader bauen
- 23. Einfache Seite senden - vs - Ajax loader
- 24. Wie bestellen Sie CSV-Artikel in einem MultiCSV Exporteur Scrapy?
- 25. Python Scrapy Artikel als Header in CSV drucken
- 26. Ausgabe während mehr als 1 Artikel in Mysql von Scrapy
- 27. Wie Crawl-Seite Link in Artikel mit Scrapy zu speichern?
- 28. Wie in scrapy
- 29. Items "like" dieses
- 30. UWP: Objekte ausblendenControl items
Das Item Beispiel erzeugt eine Menge unnötiger Variablen, die es viel unübersichtlicher aussehen lassen, 'item [" bio "] = response.xpath (" // div [enthält (@ class, 'bio')]/text() "). extrahieren()' –
Coole Sachen. Vielen Dank ! – Airbear
@PadraicCunningham Ich sehe hier keine unnötigen Variablen, da das 'bio'-Feld gestreift und verknüpft werden muss. Ihr Beispiel würde nur eine Liste von Werten ohne Aufräumen setzen. – Granitosaurus