2010-03-02 33 views
9

gói này là:Tải xuống đồng thời - Python

Tôi tải xuống một trang web, thu thập danh sách hình ảnh được phân tích cú pháp trong DOM và sau đó tải xuống các hình ảnh này. Sau này tôi sẽ lặp qua các hình ảnh để đánh giá hình ảnh nào phù hợp nhất để thể hiện trang web.

Sự cố là hình ảnh được tải xuống 1 và 1 có thể mất một khoảng thời gian.


Sẽ rất tuyệt nếu ai đó có thể chỉ cho tôi một số hướng về chủ đề.

Trợ giúp sẽ được đánh giá rất nhiều.

Trả lời

4

Here là một bài viết về luồng sử dụng tìm nạp url làm ví dụ.

6

Mặc dù luồng chắc chắn là một khả năng, thay vào đó tôi đề xuất asyncore - có một ví dụ tuyệt vời here hiển thị chính xác việc tìm nạp đồng thời hai URL (dễ dàng tổng quát thành bất kỳ danh sách URL nào!).

14

Tăng tốc thu thập thông tin về cơ bản là trường hợp sử dụng chính của Eventlet. Nó rất nhanh - chúng tôi có một ứng dụng phải đạt 2.000.000 url trong vài phút. Nó sử dụng giao diện sự kiện nhanh nhất trên hệ thống của bạn (epoll, nói chung), và sử dụng greenthreads (được xây dựng trên đầu trang của coroutines và rất rẻ tiền) để làm cho nó dễ dàng để viết.

Dưới đây là an example from the docs:

urls = ["http://www.google.com/intl/en_ALL/images/logo.gif", 
    "https://wiki.secondlife.com/w/images/secondlife.jpg", 
    "http://us.i1.yimg.com/us.yimg.com/i/ww/beta/y3.gif"] 

import eventlet 
from eventlet.green import urllib2 

def fetch(url): 
    body = urllib2.urlopen(url).read() 
    return url, body 

pool = eventlet.GreenPool() 
for url, body in pool.imap(fetch, urls): 
    print "got body from", url, "of length", len(body) 

Đây là một điểm khởi đầu khá tốt cho việc phát triển một trình thu thập đầy đủ tính năng. Vui lòng truy cập #eventlet trên Freenode để yêu cầu trợ giúp.

[cập nhật: Tôi đã thêm một phức tạp hơn recursive web crawler example vào tài liệu. Tôi thề rằng nó đã có trong các tác phẩm trước khi câu hỏi này được hỏi, nhưng câu hỏi cuối cùng đã truyền cảm hứng cho tôi để hoàn thành nó. :)]

+0

liên kết thứ hai không còn hoạt động. –

0

Ngày nay có libs Python tuyệt vời bạn có thể muốn sử dụng - urllib3requests

Các vấn đề liên quan