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

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

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





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





Инсталирање Сцрапи

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





Сцрапи је доступан кроз библиотеку Пип Инсталлс Питхон (ПИП), ево освежавања како инсталирати ПИП на Виндовс, Мац и Линук .

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



Креирајте директоријум и иницијализујте виртуелно окружење.

изузетак системске услуге Виндовс 10 бсод
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Сада можете инсталирати Сцрапи у тај директоријум помоћу ПИП команде.





pip install scrapy

Брза провера да бисте се уверили да је Сцрапи правилно инсталиран

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Како направити веб претраживач

Сада када је окружење спремно, можете започети израду веб пописивача. Издвојимо неке податке са странице Википедије о батеријама: хттпс://ен.википедиа.орг/вики/Баттери_(елецтрицити) .





Први корак за писање пописивача је дефинисање Питхон класе која се протеже од Сцрапи.Спидер . Ово вам даје приступ свим функцијама и функцијама у Сцрапи -у. Назовимо овај разред паук1 .

Класи паука потребно је неколико података:

  • до име за идентификацију паука
  • до старт_урлс променљива која садржи листу УРЛ -ова са којих се може индексирати (УРЛ Википедије ће бити пример у овом водичу)
  • до парсе () метод који се користи за обраду веб странице ради извлачења информација
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

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

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Искључивање евидентирања

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

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

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

Коришћење Цхроме Инспецтор -а

Све на веб страници је ускладиштено у ХТМЛ елементима. Елементи су распоређени у Доцумент Објецт Модел (ДОМ). Разумевање ДОМ -а је од кључног значаја за максимално искоришћавање вашег веб пописивача. Пописивач веба претражује све ХТМЛ елементе на страници како би пронашао информације, па је важно знати како су распоређени.

Гоогле Цхроме има алате који вам помажу да брже пронађете ХТМЛ елементе. Помоћу инспектора можете пронаћи ХТМЛ за било који елемент који видите на веб страници.

  • Идите на страницу у Цхроме -у
  • Поставите миш на елемент који желите да видите
  • Кликните десним тастером миша и изаберите Прегледајте са менија

Ови кораци ће отворити конзолу за програмере са Елементи картица је изабрана. На дну конзоле видећете дрво са елементима. Ово дрво је начин на који ћете добити информације за своју скрипту.

Издвајање наслова

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

Покрените скрипту додавањем неког кода у парсе () метода која издваја наслов.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

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

У овом примеру, елемент је х1.фирстХеадинг . Додавање

::text

скрипти је оно што вам даје текстуални садржај елемента. Коначно, екстракт () метода враћа изабрани елемент.

Покретање ове скрипте у Сцрапи -у штампа наслов у текстуалном облику.

[u'Battery (electricity)']

Проналажење описа

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

Ево стабла елемената у Цхроме Девелопер Цонсоле -у:

мој Амазон пакет каже да је испоручен, али није
div#mw-content-text>div>p

Стрелица надесно (>) означава однос родитељ-дете између елемената.

Ова локација ће вратити све п елементи се подударају, што укључује цео опис. Да бисте добили прву п елемент можете написати овај код:

response.css('div#mw-content-text>div>p')[0]

Баш као и наслов, додајете ЦСС екстрактор

::text

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

response.css('div#mw-content-text>div>p')[0].css('::text')

Завршни израз користи екстракт () да бисте вратили листу. Можете користити Питхон придружити() функција за придруживање листи након што се све пописивање заврши.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Резултат је први пасус текста!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Прикупљање ЈСОН података

Сцрапи може извући информације у текстуалном облику, што је корисно. Сцрапи вам такође омогућава преглед података ЈаваСцрипт Објецт Нотатион (ЈСОН). ЈСОН је уредан начин за организовање информација и широко се користи у веб развоју. ЈСОН прилично лепо ради са Питхоном такође.

Када требате да прикупљате податке као ЈСОН, можете користити принос изјава уграђена у Сцрапи.

Ево нове верзије скрипте која користи изјаву о приносу. Уместо да добије први п елемент у текстуалном формату, ово ће узети све п елементе и организовати га у ЈСОН формату.

забрањено немате дозволу за приступ
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Сада можете покренути паука навођењем излазне ЈСОН датотеке:

scrapy runspider spider3.py -o joe.json

Скрипта ће сада одштампати све п елементе.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Стругање више елемената

До сада је веб пописивач обрисао наслов и једну врсту елемента са странице. Сцрапи такође може извући информације из различитих врста елемената у једној скрипти.

Издвојимо врхунске ИМДб благајне за викенд за викенд. Ове информације су извучене из хттп://ввв.имдб.цом/цхарт/бокоффице , у табели са редовима за сваки показатељ.

Тхе парсе () метода може издвојити више поља из реда. Помоћу Цхроме алатки за програмере можете пронаћи елементе угнежђене унутар табеле.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('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)').extract_first(),
}
...

Тхе слика селектор то наводи имг је потомак од тд.постерЦолумн . Да бисте извукли десни атрибут, користите израз | _+_ |.

Покретање паука враћа ЈСОН:

::attr(src)

Још веб стругача и робота

Сцрапи је детаљна библиотека која може учинити било коју врсту претраживања веба коју тражите. Што се тиче проналажења информација у ХТМЛ елементима, у комбинацији са подршком Питхона, тешко је победити. Без обзира да ли правите веб пописивач или учите о основама стругања веба, једино ограничење је колико сте спремни да научите.

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

Објави Објави Твеет Емаил 15 Команде Виндовс командне линије (ЦМД) које морате знати

Командна линија је и даље моћан алат за Виндовс. Ево најкориснијих ЦМД команди које сваки Виндовс корисник треба да зна.

Прочитајте следеће
Повезане теме
  • Програмирање
  • Алати за вебмастере
  • Програмирање
  • Питхон
  • Кодирање Туториали
  • Веб Цравлерс
О аутору Антхони Грант(Објављено 40 чланака)

Антхони Грант је слободни писац који се бави програмирањем и софтвером. Он се бави рачунарством и бави се програмирањем, Екцелом, софтвером и технологијом.

Више од Антхонија Гранта

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, критике, бесплатне е -књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили