Semaltтан оқулық: Python-да веб-скрапинг

Мен жақында KinoPoisk-ке (IMDB-нің орыс тіліндегі нұсқасы) бардым және осы жылдар ішінде мен 1000-нан астам фильмге баға бере алатынымды білдім. Бұл мәліметтерді толығырақ зерттеу қызықты болар деп ойладым: уақыт өте келе менің фильм талғамым өзгерді ме? Жылдың қай мезгілдерінде мен көбірек фильмдер көремін?

Бірақ біз әдемі графиканы талдап, құрастырмас бұрын, мәліметтер алуымыз керек. Өкінішке орай, көптеген қызметтерде жалпыға ортақ API жоқ, сондықтан сіз өзіңіздің жеңдеріңізді орап, html парақтарын талдауыңыз керек.

Бұл мақала әрдайым веб-скрапингті қалай қолдануды білгісі келетіндерге арналған, бірақ оған қолын тигізбейтін немесе неден бастау керектігін білмейтіндерге арналған.

Тапсырма

Біздің міндетіміз - бұрын көрілген фильмдер туралы мәліметтерді жинау: фильмнің атауы, қаралған уақыты мен уақыты, пайдаланушының рейтингі.

Біздің жұмысымыз екі кезеңде жүзеге асырылады:

1 кезең: html беттерін жүктеу және сақтау

2-кезең: html-ді келесі талдауға жарамды форматта талдау (csv, json, pandas деректер форматы және т.б.)

Аспаптар

Http-сұраныстарын жіберуге арналған көптеген питон-кітапханалар бар. Ең танымал және өте ыңғайлы - бұл Сұранымдар.

Html талдауға арналған кітапхананы таңдау қажет.

BeatifulSoup, lxml

Бұл html талдауға арналған ең танымал екі кітапхана және олардың біреуін таңдау - бұл жеке таңдау. Сонымен қатар, бұл кітапханалар бір-бірімен тығыз байланысты: BeautifulSoup lxml-ді жеделдету үшін ішкі талдаушы ретінде қолдана бастады, ал lxml-де сабопсератор модулі қосылды. Тәсілдерді салыстыру үшін мен BeautifulSoup көмегімен деректерді талдаймын және lxml.html модулінде XPath таңдаушыларын қолданамын.

Деректерді жүктеу

Деректерді жүктеуді бастайық. Ең алдымен, парақты url арқылы алуға және оны жергілікті файлға сақтауға тырысайық.

Біз алынған файлды ашамыз және бұл оңай емес екенін көреміз: сайт бізді робот деп санайды және деректерді көрсетпейді.

Сайттың қалай жұмыс істейтінін білейік

Браузерде сайттан ақпарат алуда проблемалар жоқ. Оның сұранысты нақты қалай жіберетінін көрейік. Ол үшін біз «Желі» панелін шолғыштағы «Әзірлеуші құралдары» ішінде қолданамыз (мен бұл үшін Firebug-ті қолданамын), әдетте, сұраныс ең ұзақ болады.

Көріп отырғанымыздай, шолушы сонымен қатар UserAgent, cookie файлдары мен параметрлердің басқа санын жібереді. Біріншіден, біз дұрыс UserAgent тақырыбын жіберуге тырысамыз.

Бұл жолы біз сәтті болдық, енді бізге қажетті мәліметтер беріліп отыр. Айта кетейік, кейде сайт cookie файлының дұрыстығын тексереді, бұл жағдайда сұраныстар кітапханасындағы сессиялар көмектеседі.

Барлық тарифтерді жүктеу

Енді біз тарифтермен бір парақты сақтай аламыз. Әдетте пайдаланушының бағалары өте көп, сондықтан оны барлық беттер бойынша қайталау қажет. Бізді қызықтыратын парақ нөмірін тікелей URL мекен-жайына жіберу оңай.

Html-ден деректер жинау

Енді html-ден деректерді жинауға кірісейік. Html парағының қалай құрылатынын түсінудің ең оңай жолы - шолғышта «Check element» функциясын қолдану. Бұл жағдайда бәрі өте қарапайым: бағалары бар кесте тегте орналасқан. Осы түйінді таңдаңыз:

bs4 ішінен BeautifulSoup импорттау

lxml импорттау html-ден

# Әдемі сорпа

сорпа = BeautifulSoup (мәтін)

film_list = soup.find ('div', ('класс': 'profileFilmsList'))

# lxml

ағаш = html.fromstring (мәтін)

film_list_lxml = ағаш.xpath ('// div [@class =' 'profileFilmList' ']') [0]

Фильмнің орыс тіліндегі атауын және фильм бетіне сілтемені қалай шығаруға болатынын білейік (мәтінді және атрибуттың мәнін қалай алуға болады).

Егер сізге тақырыпты ағылшын тілінде шығару қажет болса, «nameRus» сөзін «nameEng» етіп өзгертіңіз.

Нәтижелер

Біз веб-сайттарды қалай талдауға болатынын білдік, сұраныстар, BeautifulSoup және lxml кітапханаларымен таныстық, сонымен қатар KinoPoisk-те бұрыннан көрілген фильмдерді әрі қарай талдауға болатын мәліметтер алдық.

mass gmail