Скрапиране

Уеб изстъргване с модул за скрап на Python

Уеб изстъргване с модул за скрап на Python
Умението за изстъргване в мрежата днес стана златно, така че нека научим как можем да получим необходимите данни от уеб страници. В тази статия ще говорим за библиотеката Scrapy Python, какво може да направи и как да я използва. Да започваме.

Защо скрапиране?

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

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

Инсталация

Нека да разгледаме набързо как тази мощна библиотека може да бъде инсталирана на вашата машина.

Както при повечето библиотеки на Python, можете да инсталирате Scrapy с помощта на модула pip:

pip инсталирайте Scrapy

Можете да проверите дали инсталацията е била успешна, като импортирате скрап в интерактивната обвивка на Python.

$ python
Python 3.5.2 (по подразбиране, 14 септември 2017 г., 22:51:06)
[GCC 5.4.0 20160609] на linux

Въведете „помощ“, „авторско право“, „кредити“ или „лиценз“ за повече информация.

>>> скрап за внос

След като приключихме с инсталацията, нека да влезем в делото.

Създаване на проект за уеб изстъргване

По време на инсталацията ключовата дума scrapy беше добавена към пътя, за да можем да използваме ключовата дума директно от командния ред. Ще се възползваме от това, през цялото време на използване на библиотеката.

От избраната от вас директория изпълнете следната команда:

scrapy startproject webscraper

Това би създало директория, наречена webscraper в текущата директория и скрап.cfg файл. В webscraper  директория ще има __в него__.py, елементи.py, посредници.py, тръбопроводи.py, настройки.py файлове и директория, наречена паяци.

Нашите файлове с паяци i.д. скриптът, който прави webscraping за нас, ще се съхранява в паяци директория.

Писане на нашия паяк

Преди да продължим да пишем нашия паяк, се очаква, че вече знаем кой уебсайт искаме да изстъргваме. За целите на тази статия изстъргваме примерен уебсайт за уеб сайтове: http: // пример.webscraping.com.

Този уебсайт просто има имена на държави и техните знамена с различни страници и ние ще бракуваме три от страниците. Трите страници, върху които бихме работили, са:

http: // пример.webscraping.com / places / default / index / 0
http: // пример.webscraping.com / places / default / index / 1
http: // пример.webscraping.com / places / default / index / 2

Обратно към нашия паяк, ще създадем sample_spider.py в директорията на паяците. От терминала, просто докоснете sample_spider.py команда ще помогне за създаването на нов файл.

След създаването на файла бихме го попълнили със следните редове код:

внос скрап
 
клас SampleSpider (скрап.Паяк):
name = "проба"
start_urls = [
"http: // пример.webscraping.com / places / default / index / 0 ",
"http: // пример.webscraping.com / places / default / index / 1 ",
"http: // пример.webscraping.com / places / default / index / 2 "
]
 
def parse (самостоятелно, отговор):
номер на страница = отговор.url.split ('/') [- 1]
file_name = "страница .html ".формат (номер_страница)
с отворен (име_на_файл, 'wb') като файл:
файл.напиши (отговор.тяло)

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

проба за обхождане на скрап

Спомнете си, че дадохме нашите SampleSpider клас а име атрибут проба.

След като изпълните тази команда, ще забележите, че три файла с име page0.html, страница1.html, страница2.html се записват в директорията.

Нека да разгледаме какво се случва с кода:

внос скрап

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

клас SampleSpider (скрап.Паяк):
name = "проба"

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

start_urls = [
 
"http: // пример.webscraping.com / places / default / index / 0 ",
"http: // пример.webscraping.com / places / default / index / 1 ",
"http: // пример.webscraping.com / places / default / index / 2 "
]

Имаме и списък с URL адреси за посещение на паяка. Списъкът трябва да бъде извикан start_urls. Ако искате да дадете на списъка различно име, ще трябва да дефинираме a заявки за старт функция, която ни дава повече възможности. За да научите повече, можете да разгледате документацията за скрап.

Независимо от това, не забравяйте да включите http: // или https: // за вашите връзки, иначе ще трябва да се справите с липсваща грешка в схемата.

def parse (самостоятелно, отговор):

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

номер_страница = отговор.url.split ('/') [- 1]
file_name = "страница .html ".формат (номер_страница)

Това, което направихме с този код, е да разделим низа, съдържащ адреса, и да запазим номера на страницата само в номер на страницата променлива. След това създаваме a име на файл променлива вмъкване на номер на страницата в низа, който ще бъде името на файла, който ще създаваме.

с отворен (име_на_файл, 'wb') като файл:
файл.напиши (отговор.тяло)

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

Можем да направим нещо повече от просто запазване на уеб страницата. Библиотеката BeautifulSoup може да се използва за синтактичен анализ на тяло.отговор. Можете да разгледате този урок за BeautiulSoup, ако не сте запознати с библиотеката.

От страницата, която ще бъде бракувана, ето откъс от html, съдържащ данните, от които се нуждаем:

Ще забележите, че всички необходими данни са затворени в div тагове, така че ще пренапишем кода, за да анализираме html.
Ето новия ни скрипт:

внос скрап
от bs4 внос BeautifulSoup
 
клас SampleSpider (скрап.Паяк):
name = "проба"
 
start_urls = [
"http: // пример.webscraping.com / places / default / index / 0 ",
"http: // пример.webscraping.com / places / default / index / 1 ",
"http: // пример.webscraping.com / places / default / index / 2 "
]
 
def parse (самостоятелно, отговор):
номер на страница = отговор.url.split ('/') [- 1]
file_name = "страница .текст".формат (номер_страница)
с отворен (име_на_файл, 'w') като файл:
html_content = BeautifulSoup (отговор.body, "lxml")
div_tags = html_content.намиране ("div", "id": "results")
country_tags = div_tags.find_all ("div")
country_name_position = zip (range (len (country_tags)), country_tags)
за позиция, страна_име в страна_име_позиция:
файл.write ("номер на държавата : \ n".формат (позиция + 1, име_на държава.текст))

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

Нека да разгледаме набързо логиката.

def parse (самостоятелно, отговор):

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

номер на страница = отговор.url.split ('/') [- 1]
file_name = "страница .текст".формат (номер_страница)
с отворен (име_на_файл, 'w') като файл:

Това прави същото, както е обсъдено в първоначалния код, единствената разлика е, че работим с текстов файл вместо с html файл. Ще съхраняваме изтритите данни в текстовия файл, а не цялото уеб съдържание в html, както беше направено по-рано.

html_content = BeautifulSoup (отговор.body, "lxml")

Това, което направихме в този ред код, е да изпратим в отговор.тяло като аргумент на библиотеката BeautifulSoup и присвои резултатите на html_content променлива.

div_tags = html_content.намиране ("div", "id": "results")

Вземайки HTML съдържанието, ние го анализираме тук, като търсим div таг, който също има и документ за самоличност атрибут с резултати тъй като е стойност, тогава можем да го запазим в div_tags променлива.

country_tags = div_tags.find_all ("div")

Не забравяйте, че страните са съществували през div тагове, сега просто получаваме всички div етикети и ги запазва като списък в country_tags променлива.

country_name_position = zip (range (len (country_tags)), country_tags)
 
за позиция, страна_име в страна_име_позиция:
файл.write ("номер на държавата : \ n".формат (позиция + 1, име_на държава.текст))

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

Така че във вашия текстов файл ще имате нещо като:

страна номер 1: Афганистан
страна номер 2: Аландски острови
страна номер 3: Албания
..

Заключение

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

Трябва да отбележим, че Scrapy може да направи много повече, отколкото сме проверили тук. Можете да анализирате данни с помощта на селектори на Scrapy CSS или Xpath, ако желаете. Можете да прочетете документацията, ако трябва да направите нещо по-сложно.

Как да променяте настройките на мишката и тъчпада с помощта на Xinput в Linux
Повечето дистрибуции на Linux се доставят с библиотека “libinput” по подразбиране за обработка на входни събития в системата. Той може да обработва вх...
Пренастройте бутоните на мишката си по различен начин за различен софтуер с X-Mouse Button Control
Може би се нуждаете от инструмент, който може да промени контрола на мишката с всяко приложение, което използвате. Ако случаят е такъв, можете да изпр...
Преглед на безжична мишка на Microsoft Sculpt Touch
Наскоро прочетох за Microsoft Sculpt Touch безжична мишка и реших да я купя. След като го използвах известно време, реших да споделя опита си с него. ...