реклама

Програмите, които четат информация от уебсайтове или уеб сканери, имат всички видове полезни приложения. Можете да изстържете информация за запасите, спортни резултати, текст от акаунт в Twitter или да изтеглите цени от уебсайтове за пазаруване.

Писането на тези програми за обхождане в интернет е по-лесно, отколкото може да си мислите. Python има страхотна библиотека за писане на скриптове, които извличат информация от уебсайтове. Нека да разгледаме как да създадете уеб браузър с помощта на Scrapy.

Инсталиране на Scrap

Scrapy е библиотека на Python, която е създадена, за да изстърже мрежата и да изгради уеб сканери. Той е бърз, прост и може да се придвижва през множество уеб страници без много усилия.

Скрапията е достъпна чрез библиотеката Pip Installs Python (PIP), ето ви освежител как да инсталирате PIP на Windows, Mac и Linux Как да инсталирате Python PIP на Windows, Mac и LinuxМного разработчици на Python разчитат на инструмент, наречен PIP за Python за оптимизиране на разработката. Ето как да инсталирате Python PIP. Прочетете още .

Използване на виртуална среда на Python е предпочитано, защото ще ви позволи да инсталирате Scrapy във виртуална директория, която оставя системните ви файлове сами. Документацията на Scrap препоръчва да направите това, за да постигнете най-добри резултати.

Създайте директория и инициализирайте виртуална среда.

mkdir лагер. CD търсачка. virtualenv venv.. venv / хамбар / активирате. 

Вече можете да инсталирате Scrapy в тази директория с помощта на PIP команда.

пип инсталиране скрап. 

Бърза проверка, за да се уверите, че Scrap е инсталиран правилно

scrapy. # отпечатъци Скрапия 1.4.0 - няма активен проект Употреба: скрапия  [опции] [args] Налични команди: bench Изпълнете бърз тест за тестване на бенчмарки Извличане на URL адрес с помощта на изтеглящия Scrap genspider Генериране на нов паяк с помощта на предварително зададени шаблони runpider Изпълнете самостоятелен паяк (без да създавате проект)... 

Как да изградим уеб браузър

Сега, когато средата е готова, можете да започнете да изграждате уеб браузъра. Нека изстържем малко информация от страница в Уикипедия за батерии: https://en.wikipedia.org/wiki/Battery_(electricity).

Първата стъпка за писане на робот е определянето на клас Python, който се простира от Scrapy. паяк. Това ви дава достъп до всички функции и функции в Scrap. Нека да се обадим на този клас spider1.

Класът на паяк се нуждае от няколко части информация:

  • а име за идентифициране на паяка
  • а start_urls променлива, съдържаща списък на URL адреси, от които да се обхожда (URL на Уикипедия ще бъде пример в този урок)
  • а синтактична () метод, който се използва за обработка на уеб страницата за извличане на информация
импортиране клас на скрапция spider1 (scrapy. Spider): name = 'Wikipedia' start_urls = [' https://en.wikipedia.org/wiki/Battery_(electricity)'] def parse (самостоятелно, отговор): пас. 

Бърз тест, за да се уверите, че всичко работи правилно.

scrapy runpider spider1.py. # отпечатъци 2017-11-23 09:09:21 [scrapy.utils.log] ИНФОРМАЦИЯ: Скрапията 1.4.0 стартира (бот: scrapybot) 2017-11-23 09:09:21 [scrapy.utils.log] ИНФОРМАЦИЯ: Отменени настройки: {'SPIDER_LOADER_WARN_ONLY': Вярно} 2017-11-23 09:09:21 [scrapy.middleware] ИНФОРМАЦИЯ: Активирани разширения: ['scrapy.extensions.memusage. MemoryUsage ',' scrapy.extensions.logstats. LogStats, ...

Изключване на регистрацията

Провеждането на Scrap с този клас отпечатва информация от дневника, която няма да ви помогне в момента. Нека да го опростим, като премахнем тази излишна информация в дневника. Използвай внимание изявление, като добавите код в началото на файла.

регистриране на импортиране. logging.getLogger ('scrap'). setLevel (логване. ВНИМАНИЕ)

Сега, когато стартирате отново скрипта, информацията от дневника няма да се отпечатва.

Използване на Chrome Inspector

Всичко на уеб страница се съхранява в HTML елементи. Елементите са подредени в Document Object Model (DOM). Разбирането на DOM е изключително важно JavaScript и уеб разработка: Използване на модела на обект на документТази статия ще ви запознае със скелета на документа, с който работи JavaScript. Имайки познания за работата на този абстрактен модел на обект на документ, можете да напишете JavaScript, който работи на всяка уеб страница. Прочетете още за да извлечете максимума от вашия уеб браузър. Уеб браузър търси през всички HTML елементи на страница, за да намери информация, така че знанието как са подредени е важно.

Google Chrome има инструменти, които ви помагат да намерите по-бързо HTML елементи. Можете да намерите HTML за всеки елемент, който виждате на уеб страницата, като използвате инспектора.

  • Придвижете се до страница в Chrome
  • Поставете мишката върху елемента, който искате да видите
  • Щракнете с десния бутон и изберете Огледайте от менюто

Тези стъпки ще отворят конзолата за програмисти с елементи избран раздел. В долната част на конзолата ще видите дърво от елементи. Това дърво е как ще получите информация за вашия скрипт.

Извличане на заглавието

Нека вземем сценария да свърши някаква работа за нас; Прост обход, за да получите текста на заглавието на уеб страницата.

Стартирайте скрипта, като добавите някакъв код към синтактична () метод, който извлича заглавието.

... def parse (самостоятелно, отговор): print response.css ('h1 # firstHeading:: text'). extract ()... 

Най- отговор аргументът поддържа метод, наречен CSS () който избира елементи от страницата, като използвате местоположението, което сте предоставили.

В този пример елементът е h1.firstHeading. Добавяне ::текст към скрипта е това, което ви дава текстовото съдържание на елемента. Накрая екстракт() метод връща избрания елемент.

Изпълняването на този скрипт в Scrap отпечатва заглавието в текстова форма.

[u'Батерия (електричество)]]

Намиране на описанието

Сега, когато написахме текста на заглавието, нека да направим повече със скрипта. Ароматизаторът ще намери първия параграф след заглавието и ще извлече тази информация.

Ето дървото на елементите в конзолата за програмисти на Chrome:

Разделение # MW-съдържание текст> DIV> стр

Дясната стрелка (>) показва връзката родител-дете между елементите.

Това местоположение ще върне всички р елементи съвпадат, което включва цялото описание. За да получите първия р елемент можете да напишете този код:

response.css ( "DIV # MW съдържание текст> DIV> р") [0]

Точно като заглавието, вие добавяте CSS екстрактор ::текст за да получите текстовото съдържание на елемента.

response.css ( "Разделение # MW-съдържание текст> DIV> р") [0] .css ( ":: текст")

Крайният израз използва екстракт() за да върнете списъка. Можете да използвате Python присъединяване() функция за присъединяване към списъка, след като приключи цялото обхождане.

 def parse (самостоятелно, отговор): print '' .join (response.css ('div # mw-content-text> div> p') [0] .css (':: text'). extract ())

Резултатът е първият параграф от текста!

Електрическа батерия е устройство, състоящо се от една или повече електрохимични клетки с външни връзки, осигурени за захранване на електрически устройства като фенерчета, смартфони и електрически автомобили. [1] Когато една батерия захранва електрическа енергия, нейният положителен извод е... 

Събиране на JSON данни

Скрапията може да извлече информация в текстова форма, което е полезно. Scrap също така ви позволява да преглеждате данните JavaScript Object Notation (JSON). JSON е чист начин за организиране на информация и се използва широко в уеб разработката. JSON работи доста добре с Python JSON Python Parsing: Обикновено ръководствоНалични са библиотеки и комплекти инструменти за анализиране и генериране на JSON от почти всеки език и среда. Тази статия се съсредоточава върху методите и проблемите, възникващи от JSON python разбор. Прочетете още също.

Когато трябва да събирате данни като JSON, можете да използвате добив изявление, вградено в Scrap.

Ето нова версия на скрипта, използваща декларация за доходност Вместо да получите първия p елемент в текстов формат, това ще вземе всички p елементи и ще го организира във формат JSON.

... def parse (self, response): за e in response.css ('div # mw-content-text> div> p'): yield {'para': '' .join (e.css (':: text') ) .extract ()). strip ()}... 

Вече можете да стартирате паяка, като посочите изходен JSON файл:

scrapy runpider spider3.py -o joe.json. 

Сега скриптът ще отпечата всички p елементи.

[ {"para": "Електрическата батерия е устройство, състоящо се от една или повече електрохимични клетки с външни връзки, осигурени за захранване на електрически устройства, като напр. фенерчета, смартфони и електрически автомобили. [1] Когато една батерия захранва електрическа енергия, нейният положителен терминал е катодът, а отрицателният му терминал е анод. [2] Терминалът, обозначен като отрицателен, е източникът на електрони, който при свързване към външна верига ще тече и ще доставя енергия на външно устройство. Когато батерия е свързана към външна верига, електролитите могат да се движат като йони вътре, което позволява химичните реакции, които трябва да завършат в отделните терминали и така доставят енергия към външните верига. Именно движението на тези йони в акумулатора позволява на тока да изтича от батерията за извършване на работа. [3] Исторически терминът \ "батерия \" специално се отнася до съставено устройство на няколко клетки, но използването се е разширило допълнително, за да включва устройства, съставени от една клетка. [4] "}, {" para ":" Първичните (за еднократна употреба или \ "еднократна употреба \") батерии се използват веднъж и изхвърля; материалите на електрода се променят необратимо по време на разреждане. Чести примери са алкалната батерия, използвана за фенерчета и множество преносими електронни устройства. Вторичните (презареждащи се) батерии могат да се разреждат и зареждат многократно ...

Изстъргване на множество елементи

Досега уеб браузърът изстъргва заглавието и един вид елемент от страницата. Скрапията също може да извлича информация от различни видове елементи в един сценарий.

Нека извлечем топ хитове на IMDb Box Office за един уикенд. Тази информация е изтеглена от http://www.imdb.com/chart/boxoffice, в таблица с редове за всеки показател.

Най- синтактична () метод може да извлече повече от едно поле от реда. С помощта на Chrome Developer Tools можете да намерите елементите, вложени в таблицата.

... def parse (self, response): за e in response.css ('div # boxoffice> таблица> tbody> tr'): yield {'title': '' .join (e.css ('td.titleColumn> a:: текст '). извлечение ()). лента (),' уикенд ':' '.join (e.css (' td.ratingColumn ') [0] .css (':: text '). extract ()). лента (), 'бруто': '' .съединете се (напр. ('td.ratingColumn') [1] .css ('span.secondaryInfo:: text'). extract ()). strip (), 'weeks': '' .join (e.css (' td.weeksColumn:: text ’). extract ()). strip (),‘ image ’: e.css ('td.posterColumn img:: attr (src)'). Extra_first (),}... 

Най- образ селектор уточнява това IMG е потомък на td.posterColumn. За да извлечете правилния атрибут, използвайте израза :: attr (src).

Изпълнението на паяка връща JSON:

[ {"gross": "$ 93.8M", "weeks": "1", "weekend": "$ 93.8M", "image": " https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTIt[email protected]._V1_UY67_CR0,0,45,67_AL_.jpg", "заглавие": "Справедлива лига"}, {"бруто": "$ 27.5 млн.", "седмици": "1", "уикенд": "$ 27.5 млн.", "изображение": " https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgt[email protected]._V1_UX45_CR0,0,45,67_AL_.jpg", "title": "Wonder"}, {"gross": "$ 247.3M", "weeks": "3", "weekend": "$ 21.7M", "image": " https://images-na.ssl-images-amazon.com/images/M/[email protected]_V1_UY67_CR0,0,45,67_AL_.jpg", "title": "Thor: Ragnarok"},... ]

Още уеб стъргалки и ботове

Scrap е подробна библиотека, която може да прави почти всеки вид обхождане в мрежата, за което го поискате. Когато става въпрос за намиране на информация в HTML елементи, комбинирана с поддръжката на Python, е трудно да се победи. Независимо дали изграждате уеб браузър или запознаване с основите на изстъргването в мрежата единственото ограничение е колко сте готови да научите.

Ако търсите още начини за създаване на роботи или ботове, можете да опитате изградете Twitter и Instagram ботове, използвайки Python Как да изградите Twitter, Instagram и Reddit Bots, използвайки PythonИскате ли да създадете свои собствени ботове в социалните медии? Ето как да публикувате актуализации автоматично в Twitter, Instagram и Reddit, използвайки Python. Прочетете още . Python може да изгради някои невероятни неща в уеб разработката, така че си струва да излезете извън уеб скалърите, когато изследвате този език.

Антъни Грант е писател на свободна практика, който обхваща програмиране и софтуер. Той е основен проблем в областта на програмирането, Excel, софтуера и технологиите.