Я использую Beautiful Soup в скрипте, чтобы очистить пару сайтов. Большинство из них работают очень хорошо; Я привык видеть от 0,01 до 0,02 секунды для тех разборов на моем главном компьютере. Однако, когда я пытаюсь почистить ссылки с определенных сайтов, например, slickdeals.net, я вижу где-то между 0,9 и 2 секундами; почти в 100 раз медленнее. Это не так уж плохо на моем главном компьютере, но это сценарий, который я планирую запустить на моей Raspberry Pi 3 модели B, и для этого, в среднем, требуется от 30 до 40 секунд для ссылок на этом сайте (с редкими 60+ секунд изредка).

Поскольку мой основной компьютер намного мощнее, чем мой Pi, одновременная очистка 20+ ссылок с этого сайта занимает в общей сложности около 6–10 секунд (при этом общее количество каждого другого сайта в сравнении незначительно). Однако на моем Pi это может занять более 240 секунд (каждый сайт заканчивается через несколько секунд). Я стремлюсь запускать сценарий каждую минуту, так что это занимает слишком много времени. Это просто проблема с этим конкретным сайтом? Или я могу что-то сделать, чтобы сократить время? Вот соответствующий код, который я использую:

with futures.ProcessPoolExecutor() as executor:
    executor.map(parseStuff, urls)
def parseStuff(url):
    ... ## doing some stuff before scraping
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0')
    try:
        pageContents = urllib.request.urlopen(req).read()
        openurlArray.append((url, pageContents)) ## using this for other stuff later
        start2 = time.time()
        soup = BeautifulSoup(pageContents, 'lxml', parse_only=SoupStrainer(['span','div'], attrs={'class': possibleClasses[urlName]})) ## looking for a different value for class depending on the site, will either be in div or span tag
        end2 = time.time()
        time_taken2 = end2 - start2
        print("soup stuff for " + url + " took " + str(time_taken2) + " seconds")
0
Curlhelpp 21 Дек 2019 в 03:21

1 ответ

Таким образом, мне не удалось сократить время, которое занимает красивый суп, но мне удалось обойти эту проблему. Я переключился на использование регулярных выражений вместо этого, и это уменьшило время до менее 0,1 секунды на моем Пи. Это сложнее из-за множества регулярных выражений, но в моем случае это работает лучше.

0
Curlhelpp 24 Дек 2019 в 15:24