如何使用Python从网页下载文本文件或某些对象?

时间:2012-10-08 04:18:38

标签: python json

我正在编写一个函数,可以从http://www.namejet.com/pages/downloads.aspx下载并存储今天的预发布域名.txt文件列表。我试图用json实现它。

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下载包含预发布域名的文件。我怎样才能做到这一点?上面的代码是正确的方法吗?

2 个答案:

答案 0 :(得分: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,然后按常规方式打开它。

答案 1 :(得分:0)

我发现您的方法存在一些问题:

  1. 页面不返回任何json;因此,即使您成功访问该页面,r.json也将为空:

    >>> import requests
    >>> r = requests.get('http://www.namejet.com/pages/downloads.aspx')
    >>> r.json
    
  2. 您所追踪的文件隐藏在回发链接后面;你不能使用请求“执行”,因为它不会理解javascript。

  3. 鉴于上述情况,更好的方法是使用mechanize或替代方案来模拟浏览器。您也可以要求该公司为您提供直接链接。