wget По сравнению с urlretrieve Python

Другой способ:

12500.to_s.reverse().split(//).inject() {|x,i| (x.gsub(/ /,"").length % 3 == 0 ) ? x + " " + i : x + i}.reverse()

Вы всегда можете открыть класс Fixnum и добавить его для удобства:

module FormatNums
  def spaceify
    self.to_s.reverse().split(//).inject() {|x,i| (x.gsub(/ /,"").length % 3 == 0 ) ? x + " " + i : x + i}.reverse()
  end
end

class Fixnum
  include FormatNums
end

12500.spaceify # => "12 500"
9
задан Kapil D 10 June 2009 в 10:18
поделиться

9 ответов

Может быть, вы можете использовать wget, а затем проверять данные в Python?

1
ответ дан 4 December 2019 в 05:56
поделиться

На самом деле разницы быть не должно. Все, что делает urlretrieve, - это простой HTTP-запрос GET. Вы взяли свой код обработки данных и провели прямое сравнение пропускной способности wget и чистого python?

0
ответ дан 4 December 2019 в 05:56
поделиться

Пожалуйста, покажите нам код. Я почти уверен, что это должно быть в коде, а не в urlretrieve.

Я работал с ним раньше, и у меня никогда не было проблем, связанных со скоростью.

0
ответ дан 4 December 2019 в 05:56
поделиться

Что касается синтаксического анализа HTML, то, вероятно, самый быстрый / простой вариант - использовать lxml Что касается самих HTTP-запросов: httplib2 очень прост в использовании и, возможно, может ускорить загрузку, поскольку поддерживает соединения http 1.1 keep-alive и сжатие gzip. Существует также pycURL , который утверждает, что он очень быстрый (но более сложный в использовании) и основан на curllib, но я никогда не использовал его.

Вы также можете попробовать загружать разные файлы одновременно , но также имейте в виду, что попытка оптимизировать время загрузки слишком далеко может быть не очень вежливым по отношению к рассматриваемому веб-сайту.

Извините за отсутствие гиперссылок, но SO говорит мне: «Извините, новые пользователи могут размещать только максимум одной гиперссылки »

3
ответ дан 4 December 2019 в 05:56
поделиться

Скорость передачи данных может легко ввести в заблуждение. Не могли бы вы попробовать следующий сценарий, который просто загружает один и тот же URL-адрес с обоими wget и urllib.urlretrieve - запустите его несколько раз, если вы находитесь за прокси, который кэширует URL-адрес со второй попытки.

Для небольших файлов wget займет немного больше времени из-за времени запуска внешнего процесса, но для больших файлов, которые должны быть неуместным.

from time import time
import urllib
import subprocess

target = "http://example.com" # change this to a more useful URL

wget_start = time()

proc = subprocess.Popen(["wget", target])
proc.communicate()

wget_end = time()


url_start = time()
urllib.urlretrieve(target)
url_end = time()

print "wget -> %s" % (wget_end - wget_start)
print "urllib.urlretrieve -> %s"  % (url_end - url_start)
3
ответ дан 4 December 2019 в 05:56
поделиться
import subprocess

myurl = 'http://some_server/data/'
subprocess.call(["wget", "-r", "-np", "-A", "files", myurl])
1
ответ дан 4 December 2019 в 05:56
поделиться

Вероятно, это ошибка единичной математики с вашей стороны.

Просто обратите внимание, что 500 КБ / с (килобайт) равняется 4 Мбит / с (мегабитам) .

40
ответ дан 4 December 2019 в 05:56
поделиться

urllib работает на меня так же быстро, как wget. попробуйте этот код. он показывает прогресс в процентах так же, как и wget.

import sys, urllib
def reporthook(a,b,c): 
    # ',' at the end of the line is important!
    print "% 3.1f%% of %d bytes\r" % (min(100, float(a * b) / c * 100), c),
    #you can also use sys.stdout.write
    #sys.stdout.write("\r% 3.1f%% of %d bytes" 
    #                 % (min(100, float(a * b) / c * 100), c)
    sys.stdout.flush()
for url in sys.argv[1:]:
     i = url.rfind('/')
     file = url[i+1:]
     print url, "->", file
     urllib.urlretrieve(url, file, reporthook)
9
ответ дан 4 December 2019 в 05:56
поделиться

Вы можете использовать wget -k , чтобы задействовать относительные ссылки во всех URL-адресах.

0
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: