Schaben von Web-Seite und Neuformatierung zu einer Kalender-Datei

Ich versuche, diese Seite zu kratzen: http://stats.swehockey.se/ScheduleAndResults/Schedule/3940

Und ich bin so weit gekommen (dank alecxe) als das Abrufen des Datums und der Teams.

from scrapy.item import Item, Field from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector class SchemaItem(Item): date = Field() teams = Field() class SchemaSpider(BaseSpider): name = "schema" allowed_domains = ["http://stats.swehockey.se/"] start_urls = [ "http://stats.swehockey.se/ScheduleAndResults/Schedule/3940" ] def parse(self, response): hxs = HtmlXPathSelector(response) rows = hxs.select('//table[@class="tblContent"]/tr') for row in rows: item = SchemaItem() item['date'] = row.select('.//td[2]/div/span/text()').extract() item['teams'] = row.select('.//td[3]/text()').extract() yield item 

Also, mein nächster Schritt ist, alles herauszufinden, was kein Heimspiel von "AIK" oder "Djurgårdens IF" ist. Danach muss ich mich auf eine .ics-Datei neu formatieren, die ich zu Google Kalender hinzufügen kann.

EDIT: Also habe ich ein paar Sachen gelöst, aber immer noch viel zu tun. Mein Code sieht jetzt so aus.

 # -*- coding: UTF-8 -*- from scrapy.item import Item, Field from scrapy.spider import BaseSpider from scrapy.selector import HtmlXPathSelector class SchemaItem(Item): date = Field() teams = Field() class SchemaSpider(BaseSpider): name = "schema" allowed_domains = ["http://stats.swehockey.se/"] start_urls = [ "http://stats.swehockey.se/ScheduleAndResults/Schedule/3940" ] def parse(self, response): hxs = HtmlXPathSelector(response) rows = hxs.select('//table[@class="tblContent"]/tr') for row in rows: item = SchemaItem() item['date'] = row.select('.//td[2]/div/span/text()').extract() item['teams'] = row.select('.//td[3]/text()').extract() for string in item['teams']: teams = string.split('-') #split it home_team = teams[0]#.split(' ') #only the first name, eg just 'Djurgårdens' out of 'Djurgårdens IF' away_team = teams[1] #home_team[0] = home_team[0].replace(" ", "") #remove whitespace #home_team = home_team[0] if "AIK" in home_team: for string in item['date']: year = string[0:4] month = string[5:7] day = string[8:10] hour = string[11:13] minute = string[14:16] print year, month, day, hour, minute, home_team, away_team elif u"Djurgårdens" in home_team: for string in item['date']: year = string[0:4] month = string[5:7] day = string[8:10] hour = string[11:13] minute = string[14:16] print year, month, day, hour, minute, home_team, away_team 

Dieser Code druckt die Spiele von "AIK", "Djurgårdens IF" und "Skellefteå AIK" aus. Also mein Problem hier ist natürlich, wie man "Skellefteå AIK" Spiele herausfiltert und wenn es irgendeine einfache Möglichkeit gibt, dieses Programm besser zu machen. Gedanken dazu?

Freundliche Grüße!

2 Solutions collect form web for “Schaben von Web-Seite und Neuformatierung zu einer Kalender-Datei”

Ich vermute nur, dass Heimspiele die mit dem Team sind, das du zuerst suchst (vor dem Bindestrich).

Du kannst das in XPath oder aus Python machen. Wenn du es in XPath machen willst, wähle nur die Zeilen aus, die den Heimmannschaftsnamen enthalten.

 //table[@class="tblContent"]/tr[ contains(substring-before(.//td[3]/text(), "-"), "AIK") or contains(substring-before(.//td[3]/text(), "-"), "Djurgårdens IF") ] 

Sie können alle Whitespace (einschließlich Newlines) entfernen, ich habe sie gerade zur Lesbarkeit hinzugefügt.

Für python sollten Sie in der Lage sein, viel das gleiche zu tun, vielleicht sogar noch prägnanter mit einigen regulären Ausdrücken.

Ein paar Punkte zu beachten:

  1. string ist ein eingebauter Typ, also ist es im Allgemeinen gute Praxis zu vermeiden, es für Ihre eigenen Variablen zu verwenden
  2. Das Entfernen von Whitespace war in der Tat der Weg, um home_team zu reinigen, um einen geraden Vergleich mit dem erforderlichen "AIK" zu machen. Ich habe string.strip() auf home_team und away_team da es ein wenig sauberer als string.replace(" ", "") aber das ist eine persönliche Sache
  3. Ich habe auch ein ":" zwischen den Heim- und Auswärtsmannschaften in den print hinzugefügt, um zwischen ihnen klarer zu unterscheiden, wann ich getestet wurde, also fühlen Sie sich frei, diese Veränderung loszuwerden

Haben Sie einen Scheck und lassen Sie mich wissen, wenn es irgendwelche anderen Fragen gibt. 🙂

  def parse(self, response): hxs = HtmlXPathSelector(response) rows = hxs.select('//table[@class="tblContent"]/tr') for row in rows: item = SchemaItem() item['date'] = row.select('.//td[2]/div/span/text()').extract() item['teams'] = row.select('.//td[3]/text()').extract() for fixture in item['teams']: teams = fixture.split('-') #split it home_team = teams[0].strip() away_team = teams[1].strip() if home_team == "AIK": for fixDate in item['date']: year = fixDate[0:4] month = fixDate[5:7] day = fixDate[8:10] hour = fixDate[11:13] minute = fixDate[14:16] print year, month, day, hour, minute, home_team, ":", away_team elif home_team == u"Djurgårdens IF": for fixDate in item['date']: year = fixDate[0:4] month = fixDate[5:7] day = fixDate[8:10] hour = fixDate[11:13] minute = fixDate[14:16] print year, month, day, hour, minute, home_team, ":", away_team 
  • Brauchen Sie Hilfe bei Verwendung von XPath in ElementTree
  • Extrahieren von Just-Sibling-Element in xpath
  • Python xpath funktioniert nicht?
  • Xpath analysiert die ganze Seite, wenn ich mich nicht an
  • Erhalten Sie die Liste der XML-Attributwerte in Python
  • Wie verwende ich leere Namespaces in einer lxml xpath-Abfrage?
  • Rekursive Scraping Craigslist mit Scrapy und Python 2.7
  • XPath-Prädikat mit Sub-Pfaden mit lxml?
  • Wie man eine Variable in LXML XPath Expression verwendet
  • Wie füge ich ein Attribut zu einem Tag hinzu, das mit xpath in lxml in Python gefunden wurde?
  • Iterate durch alle Zeilen in einer Tabelle mit python lxml xpath
  • Python ist die beste Programmiersprache der Welt.