2016-09-06 2 views
1

내가 http://www.eirgridgroup.com/customer-and-industry/general-customer-information/outage-information/문제 - 긁어

그것은 XLSX - 파일, 내가 갈거야 년대의 하단에있는 정전 주의이 최신 출판물을 다운로드 코드를 작성하려고 해요 나중에 Excel로로드하십시오. 이 코드를 작성하는 프로그래밍 언어는 중요하지 않습니다.

내 첫번째 생각은 직접 URL의, http://www.eirgridgroup.com/site-files/library/EirGrid/Outage-Weeks_36(2016)-51(2016)_31%20August.xlsx 처럼 사용하고이 최신 출판물의 URL을 추측 몇 가지 코드를 만드는 것이 었습니다. 그러나 URL 이름에 불일치가 있음을 발견 했으므로 해결책이 작동하지 않습니다.

대신 웹 사이트를 긁어내어 XPath를 사용하여 파일을 다운로드하는 방법이 있습니다. 두 개의 최신 간행물에는 항상 다음 XPath가 있음을 알게되었습니다.

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

여기가 도움이 필요한 곳입니다. 나는 XPath와 Web Scraping을 처음 사용한다. 나는 파이썬에서 이와 같은 것을 시도했다.

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') 

그러나 v는 비어있는 것처럼 보인다.

모든 아이디어를 높이 평가하겠습니다!

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

또는 [position() < 3] 사용하여 XPath는 그것을 모든 일을 :

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

파일이에서 주문하는

답변

0

그냥 하는 HREF을 찾아 두 첫 번째 슬라이스이 포함되어 사용 가장 오래된 것부터 최신 것부터 처음 두 개를 얻는 것은 당신에게 두 개의 최신을 제공합니다.

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

우수함 : 당신은 그냥 기본 URL에 각 HREF에 가입하고 파일에 내용을 작성하는 데 필요한 파일을 다운로드하는

! 너무나 감사합니다. @PadraicCunningham! 나는 정말로 단서가 없었다. :) 이제 마지막 질문 하나만 남았습니다. 현재 v에 저장되어있는 두 xlsx 파일을 어떻게 저장합니까? – KarlJensen

+0

@JSkjold, 다운로드 하시겠습니까? –

+0

예, @PadraicCunningham. 그러나 결코 꺼리지 않고, 나는 그것을 이해했다. 하지만 다시 한 번 감사드립니다! 환호 – KarlJensen