Я использую 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")
1 ответ
Таким образом, мне не удалось сократить время, которое занимает красивый суп, но мне удалось обойти эту проблему. Я переключился на использование регулярных выражений вместо этого, и это уменьшило время до менее 0,1 секунды на моем Пи. Это сложнее из-за множества регулярных выражений, но в моем случае это работает лучше.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.