Асинхронный HTTP-сервер с scrapy и mongodb в python
Я в основном пытаюсь запустить HTTP-сервер, который будет отвечать контентом с веб-сайта, который я могу сканировать с помощью Scrapy. Чтобы начать сканирование веб-сайта, мне нужно войти на него и для этого мне нужно получить доступ к БД с учетными данными и тому подобным. Основная проблема здесь в том, что мне нужно, чтобы все было полностью асинхронным, и пока я изо всех сил пытаюсь найти комбинацию, которая заставит все работать должным образом без многих неаккуратных реализаций.
Я уже работал с Klein + Scrapy, но когда я приступил к реализации доступа к БД, у меня все запуталось. Есть ли способ сделать PyMongo асинхронным с витой или что-то еще (да, я видел TxMongo, но документация довольно плохая, и я хотел бы избежать этого. Я также нашел реализацию с adbapi, но я хотел бы что-то более похожее на PyMongo).
Пытаясь все обдумать, я уверен, что у aiohttp есть еще много вариантов реализации async
Доступ к БД и прочее, но потом я нахожусь в тупике с интеграцией Scrapy.
Я видел такие вещи, как scrapa, scrapyd и ScrapyRT, но они на самом деле не работают для меня. Есть ли другие варианты?
Наконец, если ничего не работает, я просто использую aiohttp и вместо Scrapy я сделаю запросы к веб-сайту, чтобы удалить их вручную и использовать beautifulsoup или что-то в этом роде, чтобы получить необходимую мне информацию из ответа. Любой совет о том, как идти по этому пути?
Спасибо за ваше внимание, я довольно нуб в этой области, поэтому я не знаю, правильно ли я понимаю. Независимо от того, любая помощь будет оценена:)
1 ответ
Есть ли способ сделать пимонго асинхронным с витой
Нет. Pymongo спроектирован как синхронная библиотека, и вы не можете сделать ее асинхронной, не переписывая ее в основном (вы можете использовать потоки или процессы, но это не то, что вы просили, также вы можете столкнуться с проблемами безопасности потоков кода).
Попытка обдумать ситуацию с другой стороны, я уверен, что у aiohttp гораздо больше возможностей для реализации асинхронного доступа к БД и тому подобного.
Это не так. aiohttp
это библиотека http - она может выполнять http асинхронно, и это все, что не поможет вам получить доступ к базам данных. Вы должны были бы в основном переписать pymongo сверху этого.
Наконец, если ничего не работает, я просто использую aiohttp и вместо скрапа я сделаю запросы к веб-сайту, чтобы удалить их вручную и использовать Beautifulsoup или что-то в этом роде, чтобы получить необходимую мне информацию из ответа.
Это значит, что нужно много работать, чтобы не использовать скрап, и это не поможет вам с проблемой пимонго - вам все равно придется переписать пимонго!
Мое предложение - учиться txmongo
! Если вы не можете и хотите переписать его, используйте twisted.web
написать это вместо aiohttp
с тех пор вы можете продолжать использовать scrapy
!