Удаление целевых страниц из списка доменов [закрыто]
-
21-09-2019 - |
Вопрос
У меня есть достаточно длинный список веб-сайтов, для которых я хочу загрузить целевые (index.html или эквивалентные) страницы.В настоящее время я использую Scrapy (большая любовь к парням, стоящим за ним - это потрясающий фреймворк).Scrapy выполняет эту конкретную задачу медленнее, чем хотелось бы, и мне интересно, будет ли wget или другая альтернатива быстрее, учитывая, насколько проста задача.Есть какие-нибудь идеи?
(Вот что я делаю со Scrapy.Что-нибудь, что я могу сделать, чтобы оптимизировать scrapy для этой задачи?)
Итак, у меня есть начальный список URL-адресов, подобный
start_urls=[google.com yahoo.com aol.com ] start_urls=[начало]
И я вычищаю текст из каждого ответа и сохраняю его в формате xml.Мне нужно отключить offsitemiddleware, чтобы разрешить использование нескольких доменов.
Scrapy работает, как ожидалось, но кажется медленным (около 1000 в час или 1 каждые 4 секунды).Есть ли способ ускорить это, увеличив количество CONCURRENT_REQUESTS_PER_SPIDER при запуске одного spider?Что-нибудь еще?
Решение
Если вам нужен способ одновременной загрузки нескольких сайтов с помощью python, вы можете сделать это с помощью стандартных библиотек, подобных этой:
import threading
import urllib
maxthreads = 4
sites = ['google.com', 'yahoo.com', ] # etc.
class Download(threading.Thread):
def run (self):
global sites
while sites:
site = sites.pop()
print "start", site
urllib.urlretrieve('http://' + site, site)
print "end ", site
for x in xrange(min(maxthreads, len(sites))):
Download().start()
Вы также могли бы проверить httplib2
или PycURL
чтобы выполнить загрузку за вас вместо urllib
.
Мне не совсем ясно, как именно вы хотите, чтобы очищенный текст в формате xml выглядел, но вы могли бы использовать xml.etree.ElementTree
из стандартной библиотеки или вы могли бы установить BeautifulSoup
(что было бы лучше, поскольку оно обрабатывает искаженную разметку).