2014-01-08 5 views
2

Я хочу автоматически загружать файлы с этого page.scraping: скачать файлы с url

Я пробовал много методов, как:

download.file 
read.table 
GET 

Но без успеха. Я не прошу ввести код, но я прошу каких-либо намеков/идей справиться с такой ситуацией.

+1

С Python, общий подход заключается в использовании [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/) –

+0

Почему не работает файл download.file? Работает на меня. – Spacedman

+0

@Spacedman вы можете показать мне это, пожалуйста? Может, я что-то пропустил? – agstudy

ответ

6

Python версия который используется BeautifulSoup.

try: 
    # Python 3.x 
    from urllib.request import urlopen, urlretrieve, quote 
    from urllib.parse import urljoin 
except ImportError: 
    # Python 2.x 
    from urllib import urlopen, urlretrieve, quote 
    from urlparse import urljoin 

from bs4 import BeautifulSoup 

url = 'http://oilandgas.ky.gov/Pages/ProductionReports.aspx' 
u = urlopen(url) 
try: 
    html = u.read().decode('utf-8') 
finally: 
    u.close() 

soup = BeautifulSoup(html) 
for link in soup.select('div[webpartid] a'): 
    href = link.get('href') 
    if href.startswith('javascript:'): 
     continue 
    filename = href.rsplit('/', 1)[-1] 
    href = urljoin(url, quote(href)) 
    try: 
     urlretrieve(href, filename) 
    except: 
     print('failed to download') 
+0

Спасибо за это решение. 'BeautifulSoup' действительно красиво. – agstudy

5

Это работает для меня:

getIt = function(what,when){ 
    url=paste0("http://oilandgas.ky.gov/Production%20Reports%20Library/", 
       when,"%20-%20",what, 
       "%20Production.xls") 
    destfile=paste0("/tmp/",what,when,".xls") 
    download.file(url,destfile) 
} 

, например:

> getIt("gas",2006) 
trying URL 'http://oilandgas.ky.gov/Production%20Reports%20Library/2006%20-%20gas%20Production.xls' 
Content type 'application/vnd.ms-excel' length 3490304 bytes (3.3 Mb) 
opened URL 
================================================== 
downloaded 3.3 Mb 

КРОМЕ первого:

> getIt("oil",2010) 
trying URL 'http://oilandgas.ky.gov/Production%20Reports%20Library/2010%20-%20oil%20Production.xls' 
Error in download.file(url, destfile) : 
    cannot open URL 'http://oilandgas.ky.gov/Production%20Reports%20Library/2010%20-%20oil%20Production.xls' 
In addition: Warning message: 
In download.file(url, destfile) : 
    cannot open: HTTP status was '404 NOT FOUND' 

хотя я могу получить газ данные 2010 в:

> getIt("gas",2010) 
trying URL 'http://oilandgas.ky.gov/Production%20Reports%20Library/2010%20-%20gas%20Production.xls' 
Content type 'application/vnd.ms-excel' length 4177408 bytes (4.0 Mb) 
opened URL 
================================================== 
downloaded 4.0 Mb 

Таким образом, похоже, что они изменили систему для одной ссылки. Вы можете получить эти данные, перейдя по ссылке, а затем ищите ссылку для загрузки в черновом Sharepoint HTML.

И вот почему мы ненавидим Sharepoint, детишек.

+0

+1 Я ненавижу это слишком sharepoint, но он везде :) Вы можете увидеть мою попытку, она работает даже с вами первым файлом. Жаль, что раньше я не показывал свою попытку (технические причины). – agstudy

+0

Argh они изменились на использование ** xlsx ** вместо ** xls ** для первого. – Spacedman

Смежные вопросы