【问题标题】:Downloading pdf files using mechanize and urllib使用 mechanize 和 urllib 下载 pdf 文件
【发布时间】:2011-08-03 18:29:36
【问题描述】:

我是 Python 新手,我目前的任务是编写一个网络爬虫,在某些网页中查找 PDF 文件并下载它们。这是我目前的方法(仅适用于 1 个示例 url):

import mechanize
import urllib
import sys

mech = mechanize.Browser()
mech.set_handle_robots(False)

url = "http://www.xyz.com"

try:
    mech.open(url, timeout = 30.0)
except HTTPError, e:
    sys.exit("%d: %s" % (e.code, e.msg))

links = mech.links()

for l in links:
    #Some are relative links
    path = str(l.base_url[:-1])+str(l.url)
    if path.find(".pdf") > 0:
       urllib.urlretrieve(path)

程序运行没有任何错误,但我没有看到 pdf 保存在任何地方。我可以通过浏览器访问 pdf 并保存它。有什么想法吗?我正在使用 pydev(基于 eclipse)作为我的开发环境,如果这有什么不同的话。

另一个问题是,如果我想在保存 pdf 的同时给它一个特定的名称,我该怎么做?这种方法正确吗?在保存 PDF 之前,我是否必须创建一个带有“文件名”的文件?

urllib.urlretrieve(path, filename) 

提前致谢。

【问题讨论】:

    标签: python eclipse web-crawler mechanize urllib


    【解决方案1】:

    urllib 的文档说明了 urlretrieve 函数:

    第二个参数(如果存在)指定要复制的文件位置 to(如果不存在,该位置将是具有生成名称的临时文件)。

    函数的返回值有文件所在的位置:

    返回一个元组(文件名,标题),其中文件名是本地文件 可以在其下找到对象的名称,标题是 由 urlopen() 返回的对象的 info() 方法(对于 远程对象,可能已缓存)。

    所以,改变这一行:

    urllib.urlretrieve(path)
    

    到这里:

    (filename, headers) = urllib.urlretrieve(path)
    

    filename 中的路径将具有该位置。或者,将 filename 参数传递给 urlretrieve 以自己指定位置。

    【讨论】:

      【解决方案2】:

      我从未使用过 mechanize,但来自http://docs.python.org/library/urllib.html 的 urllib 文档:

      urllib.urlretrieve(url[, filename[, reporthook[, data]]])

      将由 URL 表示的网络对象复制到本地文件,如果 必要的。如果 URL 指向本地文件或有效的缓存副本 对象存在,对象不被复制。返回一个元组 (filename, headers) 其中 filename 是本地文件名 可以找到对象,并且 headers 是 info() 的任何方法 urlopen() 返回的对象返回(对于远程对象, 可能被缓存)。异常与 urlopen() 相同。

      如您所见,如果您不指定,urlretrieve 函数将保存到一个临时文件中。因此,请尝试按照您在第二段代码中的建议指定文件名。否则你可以像这样调用 urlretrieve:

          saved_filename,headers = urllib.urlretrieve(path)
      

      然后再使用 saved_filename。

      【讨论】:

        猜你喜欢
        • 2012-06-15
        • 1970-01-01
        • 2011-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        相关资源
        最近更新 更多