Разработка среды:
- CentOS7
- пункт 18,1
- Docker версия 18.09.3, сборка 774a1f4
- клиент командной строки anaconda (версия 1.7.2)
- Python3.7
- Scrapy 1.6.0
- SCRAPY разбрызгивание
- MongoDB (дБ версия v4.0.6)
- PyCharm
Характеристики сервера:
- CPU ->
процессор: 22,
vendor_id: GenuineIntel,
семья процессора: 6,
модель: 45,
Название модели: Intel (R) Xeon (R) CPU E5-2430 0 @ 2,20 ГГц
- RAM -> Mem: 31960
- 64 бит
Hello.
Я разработчик php, и это мой первый проект на python. Я пытаюсь использовать python, потому что слышал, что у python есть много преимуществ для сканирования в Интернете.
Я сканирую один динамический веб-сайт, и мне нужно сканировать около 3500 страниц каждые 5-15 секунд. На данный момент у меня слишком медленно. Ползать только 200 страниц в минуту.
Мой источник такой:
main.py
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from spiders.bot1 import Bot1Spider
from spiders.bot2 import Bot2Spider
from spiders.bot3 import Bot3Spider
from spiders.bot4 import Bot4Spider
from pprint import pprint
process = CrawlerProcess(get_project_settings())
process.crawl(Oddsbot1Spider)
process.crawl(Oddsbot2Spider)
process.crawl(Oddsbot3Spider)
process.crawl(Oddsbot4Spider)
process.start()
bot1.py
import scrapy
import datetime
import math
from scrapy_splash import SplashRequest
from pymongo import MongoClient
from pprint import pprint
class Bot1Spider(scrapy.Spider):
name = 'bot1'
client = MongoClient('localhost', 27017)
db = client.db
def start_requests(self):
count = int(self.db.games.find().count())
num = math.floor(count*0.25)
start_urls = self.db.games.find().limit(num-1)
for url in start_urls:
full_url = domain + list(url.values())[5]
yield SplashRequest(full_url, self.parse, args={'wait': 0.1}, meta={'oid': list(url.values())[0]})
def parse(self, response):
pass
settings.py
BOT_NAME = 'crawler'
SPIDER_MODULES = ['crawler.spiders']
NEWSPIDER_MODULE = 'crawler.spiders'
# Scrapy Configuration
SPLASH_URL = 'http://localhost:8050'
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
SPIDER_MIDDLEWARES = {
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'my-project-name (www.my.domain)'
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
# Configure maximum concurrent requests performed by Scrapy (default: 16)
CONCURRENT_REQUESTS = 64
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
CONCURRENT_REQUESTS_PER_DOMAIN = 16
При выполнении этого кода я использую эту команду: python main.py
После просмотра моего кода, пожалуйста, помогите мне. Я с удовольствием выслушаю любое высказывание.
1.Как мой паук может работать быстрее? Я пытался использовать многопоточность, но, похоже, он работает неправильно.
2. Какова максимальная производительность для сканирования в Интернете?
3. Можно ли сканировать 3500 динамических страниц каждые 5-15 секунд?
Спасибо.