Không có lý do để sử dụng os.system. Tránh viết một kịch bản shell trong Python và đi với một cái gì đó như urllib.urlretrieve hoặc tương đương.
Chỉnh sửa ... để trả lời phần thứ hai của câu hỏi, bạn có thể thiết lập nhóm chủ đề bằng cách sử dụng lớp Hàng đợi thư viện chuẩn. Vì bạn đang tải xuống rất nhiều, GIL không phải là vấn đề. Tạo danh sách các URL bạn muốn tải xuống và cung cấp chúng cho hàng đợi công việc của bạn. Nó sẽ xử lý các yêu cầu đẩy đến các luồng công nhân.
Tôi đang chờ bản cập nhật cơ sở dữ liệu hoàn tất, vì vậy, tôi sẽ nhanh chóng thực hiện việc này cùng nhau.
#!/usr/bin/python
import sys
import threading
import urllib
from Queue import Queue
import logging
class Downloader(threading.Thread):
def __init__(self, queue):
super(Downloader, self).__init__()
self.queue = queue
def run(self):
while True:
download_url, save_as = queue.get()
# sentinal
if not download_url:
return
try:
urllib.urlretrieve(download_url, filename=save_as)
except Exception, e:
logging.warn("error downloading %s: %s" % (download_url, e))
if __name__ == '__main__':
queue = Queue()
threads = []
for i in xrange(5):
threads.append(Downloader(queue))
threads[-1].start()
for line in sys.stdin:
url = line.strip()
filename = url.split('/')[-1]
print "Download %s as %s" % (url, filename)
queue.put((url, filename))
# if we get here, stdin has gotten the ^D
print "Finishing current downloads"
for i in xrange(5):
queue.put((None, None))
Bạn sẽ làm như thế nào? Tìm kiếm đầu tiên cho tất cả các câu hỏi trước giống hệt như của bạn: http://stackoverflow.com/questions/tagged/wget+python. Thứ hai, đọc câu hỏi cụ thể này: http://stackoverflow.com/questions/419235/anyone-know-of-a-good-python-based-web-crawler-that-i-could-use –