访问网页并下载* .ext文件,其中ext可以设置python脚本

时间:2013-04-25 01:26:03

标签: python parsing url urllib2

我有一个python脚本,下载我通过URL指定的特定文件,我想知道是否有一种很好的方式来访问页面,并抓住以某个扩展名结尾的每个文件。

实施例: 转到包含几个.py文件,一些.pdf文件和一些.jpg文件以及文本和其他链接的页面。 然后将所有.py文件下载到当前目录。

这就是我现在所拥有的只是抓取我选择的特定文件:

import urllib2
import sys
import httplib
from urlparse import urlparse
import numpy

if numpy.size(sys.argv) == 1:
    print 'Need a command line argument -- Quitting'
    quit()
urlin = sys.argv[1]
url = "http://"+str(urlin)

def checkUrl(url):
    p = urlparse(url)
    conn = httplib.HTTPConnection(p.netloc)
    conn.request('HEAD', p.path)
    resp = conn.getresponse()
    return resp.status < 400


if checkUrl(url)==False:
    print 'Website is not active'
    quit()
else:

    file_name = url.split('/')[-1]
    u = urllib2.urlopen(url)
    f = open(file_name, 'wb')
    meta = u.info()
    file_size = int(meta.getheaders("Content-Length")[0])
    print "Downloading: %s Bytes: %s" % (file_name, file_size)

    file_size_dl = 0
    block_sz = 8192
    while True:
        buffer = u.read(block_sz)
        if not buffer:
            break

        file_size_dl += len(buffer)
        f.write(buffer)
        status = r"%10d  [%3.2f%%]" % (file_size_dl, file_size_dl * 100. / file_size)
        status = status + chr(8)*(len(status)+1)
        print status,

    f.close()

有没有办法将其扩展到我最初提到的那个?

编辑: 理想情况下,我希望能够使用相对标准的python包,但我并不完全反对奇怪的包。 我也知道我可以下载链接所在的页面,并解析HTML以* .ext结尾的字符串,然后返回并通过将它们添加到原始URl的末尾来下载这些扩展,但我是不擅长将文件解析为python。

1 个答案:

答案 0 :(得分:2)

我会使用Requests下载Urls,BeautifulSoup用于解析网页以查找更多要下载的网址。

这是不完整的,但是类似于:

import requests
import re
from bs4 import BeautifulSoup

req = requests.get(url)
req.raise_for_status()

html_doc = req.text.encode(req.encoding)
soup = BeautifulSoup(html_doc)

links = soup.findAll(href=re.compile("\.pdf$"))

for link in links:
    req = requests.get(link)
    # here, you'll want to use r.content, since it's probably a binary file
    content = req.content
    # write the bytes to a file