cod*_*eer 5 concurrency scrapy web-scraping python-2.7
我正在尝试进行 Scrapy 广泛的爬行。目标是在不同的域进行许多并发爬网,但同时在每个域上轻轻爬行。因此能够保持良好的爬行速度并保持每个 url 上的请求频率较低。
这是我使用的蜘蛛:
import re
import scrapy
from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from myproject.items import MyprojectItem
class testSpider(CrawlSpider):
name = "testCrawler16"
start_urls = [
"http://example.com",
]
extractor = SgmlLinkExtractor(deny=('.com','.nl','.org'),
allow=('.se'))
rules = (
Rule(extractor,callback='parse_links',follow=True),
)
def parse_links(self, response):
item = MyprojectItem()
item['url'] =response.url
item['depth'] = response.meta['depth']
yield item
Run Code Online (Sandbox Code Playgroud)
这是我使用的设置:
BOT_NAME = 'myproject'
SPIDER_MODULES = ['myproject.spiders']
NEWSPIDER_MODULE = 'myproject.spiders'
REACTOR_THREADPOOL_MAXSIZE = 20
RETRY_ENABLED = False
REDIRECT_ENABLED = False
DOWNLOAD_TIMEOUT = 15
LOG_LEVEL = 'INFO'
COOKIES_ENABLED = False
DEPTH_LIMIT = 10
AUTOTHROTTLE_ENABLED = True
CONCURRENT_REQUESTS = 10
CONCURRENT_REQUESTS_PER_DOMAIN = 1
AUTOTHROTTLE_TARGET_CONCURRENCY = 1
AUTOTHROTTLE_START_DELAY = 5
AUTOTHROTTLE_MAX_DELAY = 60
Run Code Online (Sandbox Code Playgroud)
问题是,一段时间后,爬虫同时爬行的次数越来越少,并且只会在几个域之间交替,有时只有一个。因此自动油门会减慢爬行速度。我怎样才能让蜘蛛保持并发并与许多域有许多单独的连接,并使用并发来保持速度,同时保持每个域的低请求率?
AUTOTHROTTLE_ENABLED不建议快速爬行,我建议将其设置为False,然后自行轻轻爬行。
这里您需要的唯一设置是CONCURRENT_REQUESTS和CONCURRENT_REQUESTS_PER_DOMAIN和DOWNLOAD_DELAY。
设置DOWNLOAD_DELAY为您希望对每个域的每个请求进行爬网的值,10例如,如果您希望每分钟 6 个请求(每秒一个10)。
设置CONCURRENT_REQUESTS_PER_DOMAIN为 1 以尊重每个域的先前DOWNLOAD_DELAY间隔。
设置CONCURRENT_REQUESTS为较高值,它可能是您计划抓取的域数量(或更多)。这只是为了不干扰之前的设置。
| 归档时间: |
|
| 查看次数: |
2362 次 |
| 最近记录: |