2017-02-01 2 views
0

Если посмотреть на документацию по scrapy для download_delay и Concurrent_requests, я понимаю: если у меня есть «CONCURRENT_REQUESTS»: 25 и download_delay из 1 секунды, это означает, что после того, как scrapy запросит 25 страниц, scrapy будет ждать все 25 для загрузки, затем подождите 1 секунду и снова запросите 25 страниц. Если я использую download_delay из 0 секунд, то scrapy делает то же самое, что и выше, без 1-секундной задержки. Но когда я использовал эти настройки в своем скрепе, это не работает так, как ожидалось, так как, когда я нахожусь в 0 секунд, мое сетевое использование составляет 2,1 Мбит/с в среднем, когда я использую задержку в 0 секунд по сравнению с задержкой в ​​1 секунду, когда мое использование сети просто 0,3 Мбит/с в среднем (максимум 0,4 Мбит/с). Вот мой код:Scrapy's Download_Delay и параллельные запросы не работают должным образом

class DetailsxxxSpider(scrapy.Spider): 
name = "details" 
allowed_domains = ["www.xxx.com"] 
download_delay = 1 
custom_settings = {'CONCURRENT_REQUESTS': 25} 
def start_requests(self): 
    engine = create_engine('sqlite:///temp.db') 
    Base.metadata.bind = engine 
    DBSession = sessionmaker(bind=engine) 
    session = DBSession() 
    urls = session.query(Temp.url).filter_by(status = "Insert").all() 
    # print urls 
    for url in urls: 
     yield Request(url[0]) 

скорость сканирования 1800 страниц/минуты в среднем при использовании 0 секундной задержки, а при использовании 1-секундной задержки составляет 43 страниц/минуты, хотя страницы/мин скорости в идеале должна быть 900 страниц/минута , Кажется, что download_delay настраивается на запрос при использовании 1-секундной задержки.

Я использую прокси для каждого запроса, который я делаю. Что мне не хватает? Есть ли способ, которым я могу установить Delay после 25 запросов на 1 секунду. Я в идеале хочу скорость 900 страниц в минуту. Любая помощь будет оценена.

Благодаря

ответ

1

download_delay является количество времени, которое будет ждать между последовательными запросами от того же сайта в секундах

Так что, если вы будете использовать download_delay = 1, вы всегда будете иметь < 60 страниц/минута. (43 в вашем случае)

Чтобы получить 900 страниц/минуту, вы должны использовать:

< download_delay (60/900) < 0,067

Мое предположение было бы попробовать около 0,05

+0

Есть ли способ установить задержку загрузки после 25 запросов на 1 секунду, а не устанавливать задержку между каждым последующим запросом? –

+0

Не похоже, что это можно сделать с помощью лоскутных настроек –

0

Вы можете использовать опцию 'DOWNLOAD_DELAY' в scrapy settings.py или в вашем custom_settings dict.

+0

Это не дает ответа на вопрос. Когда у вас будет достаточно [репутации] (https://stackoverflow.com/help/whats-reputation), вы сможете [прокомментировать любое сообщение] (https://stackoverflow.com/help/privileges/comment); вместо этого [предоставить ответы, которые не требуют разъяснений у аськи) (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- я-делать-вместо этого). - [Из обзора] (/ review/low-quality-posts/18935914) –

Смежные вопросы