Требуется написать рекурсивный парсер википедии с журналированием на глубину до 6 страниц.
Вся работа должна выполняться в асинхронной функции на python3.6 или старше.
Вот примерный алгоритм работы
- 1. Инициализировать eventloop;
- 2. На вход асинхронной функции подать URL одной страницы из Википедии;
- 3. Подключиться к БД и записать URL текущей страницы;
- 4. Скачать страницу по URL и извлечь все ссылки на другие статьи по шаблону <a href="#(*)"> ,
- 5. По каждой найденной ссылке:
- записать URL ссылки в таблицу страниц, + в таблицу связей записать связанность страниц;
- закрыть подключение к БД (попробуйте не закрывать, посмотрите, что будет, как с этим бороться с точки зрения postgres (/var/lib/pgsql/data/postgresql.conf)?);
- запустить описанный выше алгоритм для данной ссылки.
- 6. И так до тех пор, пока глубина вызова не достигнет 6. Для отладки сделать 2 (там очень много вызовов получится, это рекурсия)
- 7. Выйти из функции.
(найдете другие способы получить эти ссылки – пожалуйста );
id(PK)
URL
request_depth
from_page_id(FK)
таблица страниц.id (PK)
link_id(FK)
таблица страниц.id(PK)
Для облегчения работы с БД предлагаю освоить ORM SQLAlchemy, но использовать
psycopg2.cursor и чистый SQLне возбраняется. Использовать Postgres - не
бязательно, можно обойтись и sqlite.
Асинхронные запросы
https://pawelmhm.github.io/asyncio/python/aiohttp/2016/04/22/asyncio-aiohttp.html
sqlalchemy
https://www.sqlalchemy.org/
https://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/basic_use.html
https://docs.sqlalchemy.org/en/latest/orm/extensions/declarative/basic_use.html#accessin
sg-the-metadata
https://www.sqlalchemy.org/
Результат разместить в публичном репозитории.