Сцрапи

Стругање помоћу КСПатх селектора

Стругање помоћу КСПатх селектора
ХТМЛ је језик веб страница, а између отварања и затварања сваке веб странице има пуно информација хтмл ознака. Постоји много начина да се томе приступи, али у овом чланку бисмо то радили помоћу Кспатх селектора кроз Питхон-ову библиотеку Сцрапи.

Библиотека Сцрапи је врло моћна библиотека за стругање по интернету, такође једноставна за употребу. Ако вам је ово ново, можете да пратите доступне лекције о коришћењу библиотеке Сцрапи.

Овај водич покрива употребу селектора Кспатх. Кспатх користи путању попут синтаксе за кретање чворовима КСМЛ докумената. Такође су корисни у навигацији по ХТМЛ ознакама.

За разлику од туторијала за Сцрапи, ради једноставности радићемо све своје операције овде на терминалу. То не значи да се Кспатх не може користити са одговарајућим програмом Сцрапи, већ се могу користити у анализи библиотеке на параметру одговора.

Радићемо на примеру.вебсцрапинг.цом, јер је врло једноставна и помогла би разумевању концепата.

Да бисте користили сцрап у нашем терминалу, унесите наредбу испод:

$ сцрапи схелл хттп: // пример.вебсцрапинг.цом

Посетио би страницу и добио потребне информације, а затим би нам оставио интерактивну љуску за рад. Требали бисте видети упит попут:

У 1]:

Од интерактивне сесије радићемо са одговор објект.

Ево како би наша синтакса изгледала за већи део овог чланка:

У [1]: одговор.кпатх ('кпатхсинтак').екстракт ()

Ова наредба изнад користи се за издвајање свих подударних ознака према синтакси Кспатх, а затим је чува на листи.

У [2]: одговор.кпатх ('кпатхсинтак').ектрацт_фирст ()

Ова горња наредба се користи за издвајање само прве подударне ознаке и чува је на листи.
Сада можемо почети да радимо на синтакси Кспатх.

НАВИГАЦИЈСКЕ ТАГОВЕ

Кретање по ознакама у Кспатх-у је врло једноставно, потребна је само коса црта унапред „/“ праћена именом ознаке.

У [3]: одговор.кпатх ('/ хтмл').екстракт ()

Горња команда би вратила хтмл и све што садржи као једну ставку на листи.

Ако желимо да добијемо тело веб странице, користили бисмо следеће:

У [4]: ​​одговор.кпатх ('/ хтмл / боди').екстракт ()

Кспатх такође дозвољава џокер знак „*“, који се подудара са свим нивоима у којима се користи.

У [5]: одговор.кпатх ('/ *').екстракт ()

Горњи код би одговарао свему у документу. Иста ствар се дешава када користимо '/ хтмл'.

У [6]: одговор.кпатх ('/ хтмл / *').екстракт ()

Поред навигације по ознакама, можемо добити све потомке одређене ознаке помоћу „//“.

У [7]: одговор.кпатх ('/ хтмл // а').екстракт ()

Горњи код би вратио све сидрене ознаке испод у хтмл ознаци и.е. вратила би листу свих сидрених ознака потомака.

ОЗНАКЕ ПО АТРИБУТИМА И ЊИХОВЕ ВРЕДНОСТИ

Понекад би кретање хтмл ознакама да бисте дошли до тражене ознаке могло представљати потешкоће. Ову невољу можете избећи једноставним проналажењем потребне ознаке према њеном атрибуту.

У [8]: одговор.кпатх ('/ хтмл // див [@ид = "пагинација"]').екстракт ()

Горњи код враћа све див ознаке испод хтмл ознака која има ид атрибут са вредношћу пагинација.

У [9]: одговор.кпатх ('/ хтмл // див [@цласс = "спан12"]').екстракт ()

Горњи код би вратио листу свих див ознаке испод хтмл ознаке, само ако имају атрибут класе са вредношћу спан12.

Шта ако не знате вредност атрибута? А све што желите је да набавите ознаке са одређеним атрибутом, без бриге о његовој вредности. И ово је једноставно учинити, све што треба да урадите је да користите само симбол @ и атрибут.

У [10]: одговор.кпатх ('/ хтмл // див [@цласс]').екстракт ()

Овај код би вратио листу свих див ознака које садрже атрибут класе без обзира на то коју вредност тај атрибут класе има.

Шта ако знате само неколико знакова садржаних у вредности атрибута? Такође је могуће добити такву врсту ознака.

У [11]: одговор.кпатх ('/ хтмл // див [садржи (@ид, "јон")]').екстракт ()

Горњи код би вратио све див ознаке испод хтмл ознаке које имају атрибут ид, међутим не знамо коју вредност тај атрибут има, осим што знамо да садржи „јон“.

Страница коју рашчлањујемо има само једну ознаку у овој категорији, а вредност је „пагинација“ како би била враћена.

Цоол десно?

ОЗНАКЕ ПО ЊИХОВОМ ТЕКСТУ

Запамтите да смо раније подударали ознаке према њиховим атрибутима. Ознаке можемо подударати и према њиховом тексту.

У [12]: одговор.кпатх ('/ хтмл // а [.= "Алжир"] ').екстракт ()

Горњи код би нам помогао да добијемо све сидрене ознаке у којима је текст „Алжир“. НБ: То морају бити ознаке са тачно тим текстуалним садржајем.

предивна.

Шта кажете ако не знамо тачан садржај текста, а знамо само неколико садржаја текста? Можемо и то.

У [13]: одговор.кпатх ('/ хтмл // а [садржи (текст (), "А")]').екстракт ()

Горњи код ће добити ознаке које у свом тексту садрже слово „А“.

ИЗВЛАЧЕЊЕ САДРЖАЈА ОЗНАКЕ

Све време смо разговарали о проналажењу правих ознака. Време је да издвојимо садржај ознаке када је пронађемо.

Прилично је једноставно. Све што треба да урадимо је да синтакси додамо „/ тект ()“, а садржај ознаке би био издвојен.

У [14]: одговор.кпатх ('/ хтмл // а / тект ()').екстракт ()

Горњи код ће добити све сидрене ознаке у хтмл документу, а затим ће издвојити текстуални садржај.

ИЗВЛАЧЕЊЕ ВЕЗА

Сада када знамо како да издвојимо текст у ознакама, требало би да знамо како да издвојимо вредности атрибута. Најчешће су вредности атрибута које су нам од највеће важности везе.

То је готово исто као издвајање текстуалних вредности, али уместо да користимо „/ тект ()“ користили бисмо симбол „/ @“ и име атрибута.

У [15]: одговор.кпатх ('/ хтмл // а / @ хреф').екстракт ()

Горњи код би издвојио све везе у сидреним ознакама, везе би требало да буду вредности хреф атрибут.

НАВИГАЦИЈА СИБЛИНГ ТАГОВА

Ако сте приметили, све време смо се кретали по ознакама. Међутим, постоји једна ситуација коју нисмо решили.

Како да одаберемо одређену ознаку када су ознаке са истим именом на истом нивоу?




Авганистану




Аландска острва


У случају попут овог који имамо горе, ако бисмо га погледали, могли бисмо рећи да бисмо користили ектрацт_фирст () да бисте добили први меч.

Међутим, шта ако желимо да парирамо другом? Шта ако постоји више од десет опција, а ми желимо пету? Одмах ћемо на то одговорити.

Ево решења: Када напишемо Кспатх синтаксу, положај ознаке коју желимо стављамо у углате заграде, баш као што индексирамо, али индекс почиње на 1.

Гледајући хтмл веб странице са којом имамо посла, приметили бисте да их има много ознаке на истом нивоу. Да добијем трећу ознаку, користили бисмо следећи код:

У [16]: одговор.кпатх ('/ хтмл // тр [3]').екстракт ()

Такође бисте приметили да тагови су у двоје, ако желимо само други ознаке из редови урадили бисмо следеће:

У [17]: одговор.кпатх ('/ хтмл // тд [2]').екстракт ()

ЗАКЉУЧАК:

Кспатх је врло моћан начин за рашчлањивање хтмл датотека и могао би вам помоћи да смањите употребу регуларних израза у њиховом рашчлањивању с обзиром да има садржи функција у својој синтакси.

Постоје и друге библиотеке које омогућавају рашчлањивање са Кспатх-ом као што је Селениум за веб аутоматизацију. Кспатх нам даје пуно опција приликом рашчлањивања хтмл-а, али оно што је обрађено у овом чланку требало би да вас води кроз уобичајене операције рашчлањивања хтмл-а.

Најпопуларније лабораторијске игре Оцулус Апп
Ако сте власник Оцулус слушалица, онда морате бити упознати са бочним учитавањем. Бочно учитавање је поступак инсталирања не-продавничког садржаја на ...
10 најбољих игара за играње на Убунту-у
Виндовс платформа је била једна од доминантних платформи за играње игара због огромног процента игара које се данас развијају да би подржале Виндовс. ...
5 најбољих аркадних игара за Линук
У данашње време рачунари су озбиљне машине које се користе за игре на срећу. Ако не успете да добијете нови високи резултат, знаћете на шта мислим. У ...