Сцрапи

Веб стругање модулом за Питхон Сцрапи

Веб стругање модулом за Питхон Сцрапи
Вештина стругања са интернета данас је постала златна, па научимо како можемо добити потребне податке са веб страница. У овом чланку говорили бисмо о библиотеци Сцрапи Питхон, о томе шта она може да уради и како да је користи. Хајде да почнемо.

Зашто Сцрапи?

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

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

Инсталација

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

Као и код већине Питхон библиотека, и Сцрапи можете инсталирати помоћу пип модула:

пип инсталирати Сцрапи

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

$ питхон
Питхон 3.5.2 (подразумевано, 14. септембар 2017. 22:51:06)
[ОУУ 5.4.0 20160609] на Линук-у

Упишите „помоћ“, „ауторска права“, „кредити“ или „лиценца“ за више информација.

>>> увозна шкрапија

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

Креирање пројекта за стругање преко Интернета

Током инсталације, кључна реч сцрапи је додата у путању тако да је можемо користити директно из командне линије. Искористили бисмо ово током читаве употребе библиотеке.

Из директорија по вашем избору покрените следећу команду:

сцрапи стартпројецт вебсцрапер

Ово би створило директоријум под називом вебсцрапер у тренутном директоријуму и сцрап.цфг датотеку. У вебсцрапер  директоријум би имао __у томе__.пи, предмети.пи, миддлеварес.пи, цевоводи.пи, подешавања.пи датотеке и директоријум који се зове пауци.

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

Писање нашег паука

Пре него што наставимо да пишемо нашег паука, очекује се да већ знамо коју веб страницу желимо да стружемо. У сврху овог чланка стружемо пример веб странице за веб: хттп: // пример.вебсцрапинг.цом.

Ова веб локација садржи само називе држава и њихове заставе, са различитим страницама, а ми ћемо укинути три странице. Три странице на којима бисмо радили су:

хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 0
хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 1
хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 2

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

Након креирања датотеке, попунили бисмо је следећим редовима кода:

увозна шкрапија
 
класа СамплеСпидер (сцрап.Паук):
наме = "узорак"
старт_урлс = [
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 0 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 1 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 2 "
]
 
деф парсе (селф, респонсе):
паге_нумбер = одговор.урл.сплит ('/') [- 1]
филе_наме = "страница .хтмл ".формат (број_стране)
са отвореним (име_датотеке, 'вб') као датотека:
датотека.писати (одговор.тело)

Из горњег нивоа директоријума пројекта покрените следећу наредбу:

узорак пузања сцрапијом

Подсетимо се да смо дали своје СамплеСпидер разред а име атрибут узорак.

Након покретања те наредбе, приметили бисте да постоје три датотеке са именом паге0.хтмл, страна1.хтмл, страна2.хтмл се чувају у директоријуму.

Погледајмо шта се дешава са кодом:

увозна шкрапија

Прво увозимо библиотеку у наш простор имена.

класа СамплеСпидер (сцрап.Паук):
наме = "узорак"

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

старт_урлс = [
 
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 0 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 1 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 2 "
]

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

Без обзира на то, не заборавите да укључите хттп: // или хттпс: // за своје везе јер бисте иначе морали да се позабавите грешком шеме која недостаје.

деф парсе (селф, респонсе):

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

паге_нумбер = одговор.урл.сплит ('/') [- 1]
филе_наме = "страница .хтмл ".формат (број_стране)

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

са отвореним (име_датотеке, 'вб') као датотека:
датотека.писати (одговор.тело)

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

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

Са странице која се уклања, ево одломка хтмл-а који садржи податке који су нам потребни:

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

увозна шкрапија
из бс4 увоза БеаутифулСоуп
 
класа СамплеСпидер (сцрап.Паук):
наме = "узорак"
 
старт_урлс = [
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 0 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 1 ",
"хттп: // пример.вебсцрапинг.цом / плацес / дефаулт / индек / 2 "
]
 
деф парсе (селф, респонсе):
паге_нумбер = одговор.урл.сплит ('/') [- 1]
филе_наме = "страница .ткт ".формат (број_стране)
са отвореним (име_датотеке, 'в') као датотека:
хтмл_цонтент = БеаутифулСоуп (одговор.тело, "лкмл")
див_тагс = хтмл_цонтент.пронађи ("див", "ид": "резултати")
цоунтри_тагс = див_тагс.финд_алл ("див")
цоунтри_наме_поситион = зип (опсег (лен (цоунтри_тагс)), цоунтри_тагс)
за позицију, име_ државе у положају_име_земље:
датотека.врите ("број државе : \ н".формат (позиција + 1, име_земље.текст))

Код је прилично исти као почетни, међутим додао сам БеаутифулСоуп у наш простор имена и променио сам логику у функцији рашчлањивања.

Хајде да на брзину погледамо логику.

деф парсе (селф, респонсе):

Овдје смо дефинирали функцију рашчлањивања и дали смо јој параметар одговора.

паге_нумбер = одговор.урл.сплит ('/') [- 1]
филе_наме = "страница .ткт ".формат (број_стране)
са отвореним (име_датотеке, 'в') као датотека:

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

хтмл_цонтент = БеаутифулСоуп (одговор.тело, "лкмл")

У овом ретку кода смо послали одговор.тело као аргумент за библиотеку БеаутифулСоуп, а резултате доделио хтмл_цонтент променљива.

див_тагс = хтмл_цонтент.пронађи ("див", "ид": "резултати")

Узимајући хтмл садржај, ми га овде рашчлањујемо тражећи див ознака која такође има и ид атрибут са резултати пошто је вредност, онда је можемо сачувати у див_тагс променљива.

цоунтри_тагс = див_тагс.финд_алл ("див")

Сетите се да су земље постојале у див ознаке такође, сада једноставно добијамо све див ознаке и чувајући их као листу у цоунтри_тагс променљива.

цоунтри_наме_поситион = зип (опсег (лен (цоунтри_тагс)), цоунтри_тагс)
 
за позицију, име_ државе у положају_име_земље:
датотека.врите ("број државе : \ н".формат (позиција + 1, име_земље.текст))

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

Тако бисте у својој текстуалној датотеци имали нешто попут:

земља број 1: Авганистан
држава број 2: Аландска острва
земља број 3: Албанија

Закључак

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

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

Средњи тастер миша не ради у оперативном систему Виндовс 10
Тхе средње дугме миша помаже вам да се крећете кроз дугачке веб странице и екране са пуно података. Ако се то заустави, на крају ћете користити тастат...
Како да промените леви и десни тастер миша на рачунару са Виндовс 10
Сасвим је нормално да су сви уређаји рачунарског миша ергономски дизајнирани за дешњаке. Али постоје доступни уређаји за миш који су посебно дизајнира...
Емулирајте кликове мишем лебдењем помоћу миша без клика у оперативном систему Виндовс 10
Коришћење миша или тастатуре у погрешном положају прекомерне употребе може резултирати многим здравственим проблемима, укључујући напрезање, синдром к...