Skip to content

aiker95/python_wiki_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

python_wiki_parser

Тестовое задание на вакансию Back-end разработчик Python:

Требуется написать рекурсивный парсер википедии с журналированием на глубину до 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/

Результат разместить в публичном репозитории.

About

Задание по Python:

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages