Scrapy

Веб-парсинг с помощью модуля Python Scrapy

Веб-парсинг с помощью модуля Python Scrapy
Навык веб-парсинга сегодня стал золотым, поэтому давайте узнаем, как мы можем получить необходимые данные с веб-страниц. В этой статье мы поговорим о библиотеке Scrapy Python, о том, что она может делать и как ее использовать. Давайте начнем.

Почему Scrapy?

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

Следует сказать, что у Python есть другие библиотеки, которые можно использовать для очистки данных с веб-сайтов, но ни одна из них не сравнима со Scrapy, когда дело доходит до эффективности.

Монтаж

Давайте быстро посмотрим, как эту мощную библиотеку можно установить на вашем компьютере.

Как и большинство библиотек Python, вы можете установить Scrapy с помощью модуля pip:

pip install Scrapy

Вы можете проверить, прошла ли установка успешно, импортировав scrapy в интерактивную оболочку Python.

$ питон
Python 3.5.2 (по умолчанию, 14 сентября 2017 г., 22:51:06)
[GCC 5.4.0 20160609] в Linux

Введите «помощь», «авторские права», «кредиты» или «лицензия» для получения дополнительной информации.

>>> импорт лома

Теперь, когда мы закончили установку, давайте углубимся в самую гущу вещей.

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

Во время установки в путь было добавлено ключевое слово scrapy, поэтому мы можем использовать это ключевое слово непосредственно из командной строки. Мы будем использовать это в своих интересах на протяжении всего использования библиотеки.

В выбранном вами каталоге выполните следующую команду:

scrapy startproject webscraper

Это создаст каталог с именем веб-скряга в текущем каталоге и scrapy.cfg файл. в веб-скряга  каталог будет иметь __в этом__.ру, предметы.py, промежуточное ПО.ру, трубопроводы.ру, настройки.ру файлы и каталог с именем пауки.

Наши файлы паука i.е. скрипт, который выполняет за нас сканирование, будет храниться в пауки каталог.

Написание нашего паука

Прежде чем мы продолжим писать нашего паука, ожидается, что мы уже знаем, какой веб-сайт мы хотим очистить. Для целей этой статьи мы соскабливаем образец веб-сайта, занимающегося поиском в Интернете: http: // example.веб-сканирование.ком.

На этом веб-сайте есть только названия стран и их флаги с разными страницами, и мы собираемся удалить три страницы. Мы будем работать над тремя страницами:

http: // пример.веб-сканирование.ru / places / default / index / 0
http: // пример.веб-сканирование.ru / places / default / index / 1
http: // пример.веб-сканирование.ru / places / default / index / 2

Вернемся к нашему пауку, мы собираемся создать sample_spider.py в каталоге пауков. Из терминала простой коснитесь sample_spider.ру команда поможет создать новый файл.

После создания файла мы заполняем его следующими строками кода:

импортный лом
 
класс SampleSpider (scrapy.Паук):
name = "образец"
start_urls = [
"http: // пример.веб-сканирование.ru / places / default / index / 0 ",
"http: // пример.веб-сканирование.ru / places / default / index / 1 ",
"http: // пример.веб-сканирование.ru / places / default / index / 2 "
]
 
def parse (self, response):
page_number = ответ.url.split ('/') [- 1]
file_name = "page ".html ".формат (номер_страницы)
с open (имя_файла, 'wb') как файл:
файл.написать (ответ.тело)

На верхнем уровне каталога проекта выполните следующую команду:

образец сканирования scrapy

Напомним, что мы дали SampleSpider класс а название атрибут образец.

После выполнения этой команды вы заметите, что три файла с именем page0.html, page1.html, page2.html сохраняются в каталог.

Давайте посмотрим, что происходит с кодом:

импортный лом

Сначала мы импортируем библиотеку в наше пространство имен.

класс SampleSpider (scrapy.Паук):
name = "образец"

Затем мы создаем класс паука, который мы называем SampleSpider. Наш паук унаследовал от царапина.Паук. Все наши пауки должны унаследовать от scrapy.Паук. После создания класса мы даем нашему пауку название атрибут, это название атрибут используется для вызова паука из терминала. Если вы помните, мы запускали образец сканирования scrapy команда для запуска нашего кода.

start_urls = [
 
"http: // пример.веб-сканирование.ru / places / default / index / 0 ",
"http: // пример.веб-сканирование.ru / places / default / index / 1 ",
"http: // пример.веб-сканирование.ru / places / default / index / 2 "
]

У нас также есть список URL-адресов, которые должен посетить паук. Список необходимо назвать start_urls. Если вы хотите дать списку другое имя, нам нужно будет определить start_requests функция, которая дает нам еще несколько возможностей. Чтобы узнать больше, вы можете ознакомиться с документацией по scrapy.

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

def parse (self, response):

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

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

Что мы сделали с этим кодом, так это разбили строку, содержащую адрес, и сохранили только номер страницы в номер страницы Переменная. Затем мы создаем имя файла переменная вставка номер страницы в строке, которая будет именем файла, который мы будем создавать.

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

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

Мы можем сделать больше, чем просто сохранить веб-страницу. Библиотеку BeautifulSoup можно использовать для анализа тело.отклик. Вы можете проверить это руководство по BeautiulSoup, если вы не знакомы с библиотекой.

Вот отрывок из HTML-кода страницы, которую нужно отбросить, с нужными нам данными:

Вы могли заметить, что все необходимые данные заключены в теги div, поэтому мы собираемся переписать код, чтобы проанализировать HTML-код.
Вот наш новый сценарий:

импортный лом
из bs4 импорт BeautifulSoup
 
класс SampleSpider (scrapy.Паук):
name = "образец"
 
start_urls = [
"http: // пример.веб-сканирование.ru / places / default / index / 0 ",
"http: // пример.веб-сканирование.ru / places / default / index / 1 ",
"http: // пример.веб-сканирование.ru / places / default / index / 2 "
]
 
def parse (self, response):
page_number = ответ.url.split ('/') [- 1]
file_name = "страница .текст".формат (номер_страницы)
с open (имя_файла, 'w') как файл:
html_content = BeautifulSoup (ответ.body, "lxml")
div_tags = html_content.find ("div", "id": "результаты")
country_tags = div_tags.find_all ("div")
country_name_position = zip (диапазон (len (country_tags)), country_tags)
для должности, country_name в country_name_position:
файл.напишите ("номер страны : \ n".формат (позиция + 1, название страны.текст))

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

Давайте взглянем на логику.

def parse (self, response):

Здесь мы определили функцию синтаксического анализа и дали ей параметр ответа.

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

Это делает то же самое, что описано в исходном коде, с той лишь разницей, что мы работаем с текстовым файлом, а не с файлом html. Мы будем сохранять очищенные данные в текстовом файле, а не весь веб-контент в html, как это было сделано ранее.

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

В этой строке кода мы отправили отклик.тело в качестве аргумента библиотеки BeautifulSoup и присвоил результаты html_content Переменная.

div_tags = html_content.find ("div", "id": "результаты")

Взяв html-контент, мы анализируем его здесь, ища div тег, который также имеет и я бы атрибут с полученные результаты поскольку это ценность, то мы можем сохранить ее в div_tags Переменная.

country_tags = div_tags.find_all ("div")

Помните, что страны существовали в div теги, теперь мы просто получаем все div теги и сохраняя их в виде списка в country_tags Переменная.

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

Здесь мы перебираем положение стран среди всех тегов стран, а затем сохраняем контент в текстовом файле.

Итак, в вашем текстовом файле у вас будет что-то вроде:

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

Заключение

Scrapy, несомненно, одна из самых мощных библиотек, она очень быстрая и в основном загружает веб-страницу. Затем он дает вам свободу делать все, что вы хотите, с веб-контентом.

Следует отметить, что Scrapy может намного больше, чем мы проверили здесь. Вы можете анализировать данные с помощью селекторов Scrapy CSS или Xpath, если хотите. Вы можете прочитать документацию, если вам нужно сделать что-то более сложное.

Обзор беспроводной мыши Microsoft Sculpt Touch
Я недавно прочитал о Microsoft Sculpt Touch беспроводная мышь и решил ее купить. Побывав некоторое время, я решил поделиться своим опытом с ним. Эта б...
Экранный трекпад и указатель мыши AppyMouse для планшетов с Windows
Пользователи планшетов часто пропускают указатель мыши, особенно когда они привыкли пользоваться ноутбуками. Смартфоны и планшеты с сенсорным экраном ...
Средняя кнопка мыши не работает в Windows 10
В средняя кнопка мыши помогает пролистывать длинные веб-страницы и экраны с большим объемом данных. Если это прекратится, вы в конечном итоге будете и...