Zu meiner Abfrage in ein paar Aufzählungszeichen vor dem Expandieren zusammenzufassen:Scrapy: automatisch ausgefüllt extrahiert Felder
- Ziel-Website ist eine Sport-Website mit mehr als 100 Felder, die ich kratzen wollen.
- Ich möchte eine leere Klasse deklarieren, um mit den Feldnamen zu füllen und sie mit den relevanten Werten zu füllen.
- Ich bin unklar, wie Sie die Items-Datei für ein Szenario ändern, in dem Sie nicht explizit Ihre Scraped-Elemente deklarieren.
Jetzt, um zu Messing-Reißzwecken zu kommen.
Ich suche nach kratzen von a rugby database. Ein Ausschnitt des Codes ist unter:
<TeamData Possession="0.50" Score="40" Side="Home" TeamRef="t1550" Territory="0">
<Stat Type="restart_opp_player">0</Stat>
<Stat Type="kick_oppn_collection">0</Stat>
<Stat Type="kicks_from_hand">0</Stat>
<Stat Type="penalty_conceded_killing_ruck">0</Stat>
...
Dieser Code setzt auf rund weitere 140 Zeilen etwas zu machen, die ein Schmerz sein würde jedes Attribut explizit zu definieren.
Anstatt jedes Attribut einzeln zu extrahieren, möchte ich in der Lage sein, eine leere Klasse zu definieren und sie dann mit den verschiedenen Attributen zu füllen. Dies ist relativ einfach innerhalb der Shell zu erreichen.
class RugbyItem(params):
def __init__(self, params)
selc.__dict__.update(params)
home_attribute_names = response.xpath('//TeamData[@Side="Home"]/Stat/@Type').extract()
home_attribute_stats = response.xpath('//TeamData[@Side="Home"]/Stat/text()').extract()
concat = {k: v for (k, v) in (zip(home_names, home_stats))}
home_data = RugbyItem(concat)
auf dem oben Basierend, jemand in herauszufinden, helfen Sie mir konnte, was, wie ich die Artikel
class RugbyItem(scrapy.Item):
??? = scrapy.Field()
und die Spinne Klasse Dateistruktur sollte.
class MySpider(BaseSpider):
name = "rugbyspider"
allowed_domains = ["opta.net"]
start_urls = ["http://omo.akamai.opta.net/?feed_type=ruf9&game_id=113013&user=OWV3&psw=trDd59TW"]
def parse(self, response):
home_attribute_names = response.xpath('//TeamData[@Side="Home"]/Stat/@Type').extract()
home_attribute_stats = response.xpath('//TeamData[@Side="Home"]/Stat/text()').extract()
concat = {k: v for (k, v) in (zip(home_names, home_stats))}
home_data = RugbyItem(concat)
yield home_data
Danke für die Hilfe!
Ich muss zugeben, dass Sie meinen upvote verdienen. –