Tôi đang cố truy xuất tệp 500MB bằng Python và tôi có tập lệnh sử dụng urllib.urlretrieve()
. Dường như có sự cố mạng giữa tôi và trang web tải xuống, vì cuộc gọi này liên tục bị treo và không hoàn thành. Tuy nhiên, sử dụng wget
để truy xuất tệp có xu hướng hoạt động không có sự cố. Sự khác nhau giữa urlretrieve()
và wget
có thể gây ra sự khác biệt này là gì?Sự khác biệt giữa Python urllib.urlretrieve() và wget
Trả lời
Câu trả lời khá đơn giản. urllib
và urllib2
của Python không ở đâu gần như trưởng thành và mạnh mẽ như chúng có thể. Thậm chí tốt hơn so với wget trong kinh nghiệm của tôi là cURL
. Tôi đã viết mã tải xuống hàng gigabyte tệp qua HTTP với kích thước tệp từ 50 KB đến hơn 2 GB. Theo hiểu biết của tôi, cURL là phần mềm đáng tin cậy nhất trên hành tinh ngay bây giờ cho nhiệm vụ này. Tôi không nghĩ rằng python, wget, hoặc thậm chí hầu hết các trình duyệt web có thể phù hợp với nó về tính chính xác và mạnh mẽ của việc thực hiện. Trên một con trăn đủ hiện đại sử dụng urllib2 đúng cách, nó có thể được làm khá đáng tin cậy, nhưng tôi vẫn chạy một tiến trình con curl và đó là hoàn toàn đá rắn.
Một cách khác để nêu rõ điều này là cURL chỉ thực hiện một điều và nó thực hiện tốt hơn bất kỳ phần mềm nào khác vì nó đã có nhiều sự phát triển và tinh tế hơn. Python urllib2
có ích và tiện lợi và hoạt động đủ tốt cho khối lượng công việc nhỏ đến trung bình, nhưng cURL là con đường phía trước về độ tin cậy.
Ngoài ra, cURL có nhiều tùy chọn để điều chỉnh hành vi của độ tin cậy bao gồm thử lại đếm, giá trị timeout vv
Nếu bạn đang sử dụng:
page = urllib.retrieve('http://example.com/really_big_file.html')
bạn đang tạo một chuỗi 500mb mà cũng có thể đánh thuế máy tính của bạn, làm cho nó chậm, và gây ra các kết nối đến thời gian chờ. Nếu vậy, bạn nên sử dụng:
(filename, headers) = urllib.retrieve('http://...', 'local_outputfile.html')
sẽ không đánh thuế thông dịch viên.
Điều đáng chú ý là urllib.retrieve() sử dụng urllib.urlopen() which is now deprecated.
- 1. Sự khác biệt giữa Smalltalk và python?
- 2. sự khác biệt giữa python 2.7.3 và python 3.3
- 3. Sự khác biệt giữa $ (...) và `...`
- 4. Sự khác biệt giữa. và #
- 5. Sự khác biệt giữa $ * và $ @
- 6. Sự khác biệt giữa ". +" Và ". +?"
- 7. Sự khác biệt giữa "**/* /" và "** /"?
- 8. Sự khác biệt giữa = và: =
- 9. Sự khác biệt giữa Kivy và PY4A
- 10. Sự khác biệt giữa plt.close() và plt.clf()
- 11. Sự khác biệt giữa dir (…) và vars (…) .keys() bằng Python?
- 12. Python - sự khác biệt giữa os.access và os.path.exists?
- 13. Có sự khác biệt nào giữa cpython và python
- 14. Sự khác biệt giữa Nhiều Nếu và Elif của Python
- 15. Sự khác biệt giữa phao Python và phao float32
- 16. Sự khác biệt trong python giữa basestring và types.StringType?
- 17. Sự khác biệt giữa trả lại và in bằng python?
- 18. Sự khác biệt giữa qt và PyQt4
- 19. Sự khác biệt về sự khác biệt giữa Matplotlib giữa Agg và Cairo
- 20. Sự khác biệt giữa Html.RenderAction và Html.Action
- 21. Sự khác biệt giữa cookie và phiên?
- 22. Sự khác biệt giữa '.' và "." trong java
- 23. Sự khác biệt giữa SimpleDB và S3
- 24. C++ - Sự khác biệt giữa (*). và ->?
- 25. Sự khác biệt giữa offsetHeight và clientHeight
- 26. Sự khác biệt giữa RDLC và SSRS
- 27. Sự khác biệt giữa "\ n" và Environment.NewLine
- 28. Sự khác biệt giữa AForge và OpenCV
- 29. Sự khác biệt giữa toFixed() và toPrecision()?
- 30. sự khác biệt giữa cacao và cocoatouch
Điểm tốt, mặc dù tôi đang sử dụng phiên bản dài hơn tiết kiệm vào một tập tin. – jrdioko