Удаление целевых страниц из списка доменов [закрыто]

StackOverflow https://stackoverflow.com/questions/2501838

  •  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 (что было бы лучше, поскольку оно обрабатывает искаженную разметку).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top