2012-10-08 25 views
0

我正在編寫一個函數,用於從http://www.namejet.com/pages/downloads.aspx下載並存儲當前的預發佈域名.txt文件列表。我試圖用json來實現它。如何使用Python從網頁下載文本文件或某些對象?

import json 
import requests 

def hello(): 
    r = requests.get('http://www.namejet.com/pages/downloads.aspx') 
    #Replace with your website URL 

    with open("a.txt", "w") as f: 
    #Replace with your file name 
     for item in r.json or []: 
      try: 
       f.write(item['name']['name'] + "\n") 
      except KeyError: 
       pass 

hello() 

我需要使用python下載包含預發佈域的文件。我怎樣才能做到這一點?上述代碼是否正確地做到這一點?

+0

這聽起來像是DNS解析的問題。我假設代碼中的縮進是正確的,因爲它不適合粘貼。此外,您嘗試打開的鏈接不存在(404錯誤)。 –

+0

鏈接是:http://www.namejet.com/pages/downloads.aspx –

+0

您的錯誤仍然與DNS解析有關。一旦你得到解決,'r.json'將是空的,因爲頁面不返回任何json。 –

回答

0

我看到了一些問題與您的方法:

  1. 的頁面不返回任何JSON;所以即使你成功地訪問該頁面,r.json將是空的:

    >>> import requests 
    >>> r = requests.get('http://www.namejet.com/pages/downloads.aspx') 
    >>> r.json 
    
  2. ,你是後的文件,背後卻隱藏着一個回傳鏈接;你不能「執行」使用請求,因爲它不會理解JavaScript。

鑑於上述情況,更好的方法是使用mechanize或替代方案來模擬瀏覽器。您也可以要求公司爲您提供直接鏈接。

+0

謝謝你的回答,但它不會下載或得到我的任何文件。我想在「預發佈域名」下下載文件。公司不會給我提供直接鏈接!因此,今天是10月8日,您希望獲得「2012年10月8日星期一」文件。 –

2

我不認爲機械化對JavaScript有很大的用處,請使用selenium。這裏有一個例子:

In [1]: from selenium import webdriver 
In [2]: browser=webdriver.Chrome() # Select browser that you want to automate 
In [3]: browser.get('http://www.namejet.com/pages/downloads.aspx') 
In [4]: element=browser.find_element_by_xpath(
      '//a[@id="ctl00_ContentPlaceHolder1_hlPreRelease1"]') 

In [5]: element.click() 

現在,你可以找到你的下載文件夾prerelease_10-08-2012.txt,您可以在通常的方式打開它。