2013-04-25 43 views
0

我有一個python腳本,下載一個特定的文件,我通過URL指定,我想知道是否有一個很好的方式來訪問頁面,並抓取以特定擴展名結尾的每個文件。訪問網頁和下載* .ext文件,其中可以設置python腳本

例如: 轉到包含幾個.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包,但我並不完全反對奇數包。 我也知道我可以下載鏈接所在的頁面,並解析以* .ext結尾的字符串的HTML,然後返回並通過將它們添加到原始URl的末尾來下載這些擴展, m不擅長文件解析python。

+0

你可以使用[這裏](https://gist.github.com/elssar/5160757)。只需用'exe'替換pdf即可 – elssar 2013-04-25 02:56:01

回答

2

我會使用Requests下載Url,而BeautifulSoup用於解析頁面以查找更多要下載的URL。

這是不完整的,但這樣的:

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 
相關問題