Как собирать данные с сайтов: онлайн-сервисы и Python

НКО и гражданские активисты Перми работают над данными в своих проектах. Фото Ивана Печищева.
НКО и гражданские активисты Перми работают над данными в своих проектах. Фото Ивана Печищева.

31 мар­та 2018 года в Пер­ми состо­ял­ся митап Теп­ли­цы соци­аль­ных тех­но­ло­гий, посвя­щен­ный тех­но­ло­гии веб-скрей­пин­га с помо­щью про­грамм­но­го кода. Участ­ни­ки обсу­ди­ли необ­хо­ди­мость сбо­ра дан­ных и рас­смот­ре­ли сце­на­рии исполь­зо­ва­ния собран­ных дан­ных для иссле­до­ва­ния про­бле­мы, изу­че­ния ауди­то­рии в соц­се­тях и жур­на­лист­ско­го (граж­дан­ско­го) рас­сле­до­ва­ния.

Основы Python для начинающих: три строчки кода и 10 минут объяснений. Фото Ивана Печищева
Осно­вы Python для начи­на­ю­щих: три строч­ки кода и 10 минут объ­яс­не­ний. Фото Ива­на Печи­ще­ва.

Веб-скрей­пинг (от англ. Scraping – соскаб­ли­ва­ние) – это тех­но­ло­гия, исполь­зу­ю­щая скрип­ты для захо­да на сайт под видом обыч­но­го поль­зо­ва­те­ля и соби­ра­ю­щая инфор­ма­цию по зара­нее уста­нов­лен­ным пара­мет­рам. Таким обра­зом, мож­но полу­чать, обра­ба­ты­вать, систе­ма­ти­зи­ро­вать и сохра­нять в обыч­ном тек­сто­вом фор­ма­те дан­ные тысяч веб-стра­ниц за счи­тан­ные мину­ты.

Экс­перт мита­па, Эскен­дер Дже­ма­ди­нов, магистр факуль­те­та эко­но­ми­ки, менедж­мен­та и биз­нес-инфор­ма­ти­ки НИУ ВШЭ, Пермь, рас­ска­зал о тео­ре­ти­че­ских осно­вах сбо­ра дан­ных и пока­зал на прак­ти­ке воз­мож­но­сти язы­ка Python.

Пер­вое, с чем сто­ит разо­брать­ся начи­на­ю­щим «скрай­пе­рам», – это Document Object Model. Это объ­ект­ная модель, по кото­рой постро­ен любой html-доку­мент: эле­мен­ты выстра­и­ва­ют­ся в иерар­хию, как ствол и вет­ви дере­ва от кор­ня. Каж­дый html-тег ста­но­вит­ся частью дере­ва с типом «эле­мент». Вло­жен­ные в него теги ста­но­вят­ся дочер­ни­ми узла­ми. У каж­до­го эле­мен­та есть атри­бут, его харак­те­ри­сти­ка.

Document Object Model. Слайд из презентации Эскендера Джемадинова
Document Object Model. Слайд из пре­зен­та­ции Эскен­де­ра Дже­ма­ди­но­ва.

С помо­щью DOM-при­ло­же­ния и испол­ня­е­мый код, кото­рые «видят» содер­жи­мое html-стра­ниц. Ука­зав иско­мый эле­мент и его харак­те­ри­сти­ку, мож­но авто­ма­ти­че­ски най­ти его на мно­же­стве веб-стра­ниц, не при­бе­гая к руч­но­му поис­ку.

Теперь обра­тим­ся к про­грам­ми­ро­ва­нию. Для рабо­ты по сбо­ру дан­ных могут потре­бо­вать­ся сле­ду­ю­щие биб­лио­те­ки Python или их ана­ло­ги:

  • Requests выпол­ня­ет HTTP-запро­сы (обра­ще­ние к сай­ту, полу­че­ние дан­ных веб-стра­ни­цы);
  • BeatifulSoup ана­ли­зи­ру­ет html-код и выде­ля­ет нуж­ные эле­мен­ты с ука­зан­ны­ми харак­те­ри­сти­ка­ми (это назы­ва­ет­ся «пар­синг»).

Нуж­но учи­ты­вать, что адми­ни­стра­то­рам сай­тов не нра­вит­ся, когда кто-то про­во­дит сбор инфор­ма­ции таким обра­зом, так как это созда­ет допол­ни­тель­ную нагруз­ку на сайт. Ино­гда систем­ные адми­ни­стра­то­ры защи­ща­ют сайт коли­че­ством допу­сти­мых запро­сов, авто­ри­за­ци­ей, уста­нов­кой эле­мен­тов, скры­ва­ю­щих часть кон­тен­та. С помо­щью Python мож­но обой­ти эти пре­гра­ды, но это сле­ду­ю­щая сту­пень навы­ков про­грам­ми­ро­ва­ния.

Для рабо­ты с Python потре­бу­ет­ся ска­чать и уста­но­вить:

  • интер­пре­та­тор Python (на мита­пе в Пер­ми исполь­зо­ва­ли вер­сию 3.6.4);
  • инте­гри­ро­ван­ную сре­ду раз­ра­бот­ки PyCharm Community.

В целом алго­ритм дей­ствий при сбо­ре инфор­ма­ции выгля­дит так:

Алгоритм web scraping'a
Алго­ритм web scraping’a

Участ­ни­ки мита­па под руко­вод­ством Эскен­де­ра Дже­ма­ди­но­ва для нача­ла собра­ли инфор­ма­цию с обыч­ной веб-стра­ни­цы с помо­щью кода, потом – объ­яв­ле­ния пор­та­ла Avito. Не обо­шли вни­ма­ни­ем и соц­се­ти. Эскен­дер рас­ска­зал о сво­ем про­ек­те ана­ли­за Instagram.

А если без программирования?

Тем, кому слож­но про­грам­ми­ро­вать, мож­но попро­бо­вать соби­рать дан­ные с сай­тов с помо­щью спе­ци­аль­ных сер­ви­сов:

  • Listly – рас­ши­ре­ние для бра­у­зе­ра Chrome;
  • Web Robots – онлайн-сер­вис.

Дополнительно рекомендуем прочитать: