2016-09-06 6 views
1

Ich versuche, einige Code, der die beiden letzten Veröffentlichungen der Outage Wochen am unteren Rand des http://www.eirgridgroup.com/customer-and-industry/general-customer-information/outage-information/Ärger xlsx-Datei von der Website herunterzuladen - Scraping

Es xlsx-Dateien gefunden, um zu schreiben, die ich werde Nachher in Excel laden. Es spielt keine Rolle, welche Programmiersprache wird der Code geschrieben.

Meine erste Idee die direkte URL, wie http://www.eirgridgroup.com/site-files/library/EirGrid/Outage-Weeks_36(2016)-51(2016)_31%20August.xlsx , und dann einige Code zu machen, die errät die URL der beiden neuesten Veröffentlichungen zu verwenden war. Aber ich habe einige Inkonsistenzen in den URL-Namen bemerkt, so dass die Lösung nicht funktionieren würde.

Stattdessen könnte es eine Lösung sein, die Website abzuschaben und den XPath zum Herunterladen der Dateien zu verwenden. Ich fand heraus, dass die beiden letzten Veröffentlichungen immer die folgenden XPaths haben:

/html/body/div[3]/div[3]/div/div/p[5]/a 
/html/body/div[3]/div[3]/div/div/p[6]/a 

Hier brauche ich Hilfe. Ich bin neu in XPath und Web Scraping. Ich habe solche Sachen in Python versucht

from lxml import html 
import requests 

page = requests.get('http://www.eirgridgroup.com/customer-and-industry/general-customer-information/outage-information/') 
tree = html.fromstring(page.content) 

v = tree.xpath('/html/body/div[3]/div[3]/div/div/p[5]/a') 

Aber v scheint leer zu sein.

Alle Ideen würden sehr geschätzt werden!

Antwort

0

Verwenden Sie einfach enthält die hrefs zu finden und in Scheiben schneiden die ersten beiden:

tree.xpath('//p/a[contains(@href, "/site-files/library/EirGrid/Outage-Weeks")]/@href')[:2] 

Oder sie alle mit dem XPath tun [position() < 3] mit:

tree.xpath'(//p/a[contains(@href, "site-files/library/EirGrid/Outage-Weeks")])[position() < 3]/@href') 

Die Dateien geordnet aus Das Neueste zum Ältesten, damit Sie die ersten beiden bekommen, gibt Ihnen die zwei neuesten.

die Dateien einfach in jede href zur Basis-URL verbinden müssen Sie zum Herunterladen und den Inhalt in eine Datei schreiben:

from lxml import html 
import requests 
import os 
from urlparse import urljoin # from urllib.parse import urljoin 


page = requests.get('http://www.eirgridgroup.com/customer-and-industry/general-customer-information/outage-information/') 
tree = html.fromstring(page.content) 

v = tree.xpath('(//p/a[contains(@href, "/site-files/library/EirGrid/Outage-Weeks")])[position() < 3]/@href') 
for href in v: 
    # os.path.basename(href) -> Outage-Weeks_35(2016)-50(2016).xlsx 
    with open(os.path.basename(href), "wb") as f: 
     f.write(requests.get(urljoin("http://www.eirgridgroup.com", link)).content) 
+0

Great! Vielen Dank @PadraicCunningham! Ich hatte wirklich keine Ahnung. :) Jetzt nur noch eine letzte Frage. Wie speichere ich die beiden xlsx-Dateien, die nun in v gespeichert sind? – KarlJensen

+0

@JSkjold, meinst du Download? –

+0

Ja, @PadraicCunningham. Aber egal, ich habe es herausgefunden. Aber danke nochmal! Prost, – KarlJensen

Verwandte Themen