Асинхронный 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!

Другие вопросы по тегам