Spider_study заметки 03

рептилия

4.Scrapy

Введение:

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

Установите фреймворк scrapy:
  1. Установитьscrapy:пройти черезpip install scrapyустановить.
  2. Если вы находитесь под Windows, вам также необходимо установитьpypiwin32, если он не установлен, будет сообщено об ошибке при запуске проекта scrapy в будущем. Способ установки:pip install pypiwin32.
  3. Если он под ubuntu, то также необходимо установить некоторые сторонние библиотеки:sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev.
Создайте проект и сканер:
  1. Создать проект:scrapy startproject [爬虫的名字].
  2. Создайте сканер: введите путь, по которому находится проект, и выполните команду:scrapy genspider [爬虫名字] [爬虫的域名]. Обратите внимание, что имя искателя не может совпадать с именем проекта.
Структура каталога проекта:
  1. items.py: модель, используемая для хранения данных, просканированных сканером.
  2. middlewares.py: файл, используемый для хранения различного промежуточного программного обеспечения.
  3. конвейеры.py: используется для хранения моделей элементов на локальном диске.
  4. settings.py: некоторая информация о конфигурации этого поискового робота (например, заголовки запросов, как часто отправлять запросы, пул IP-прокси и т. д.).
  5. scrapy.cfg: конфигурационный файл проекта.
  6. пакет spiders: все сканеры в будущем будут храниться в нем.
Смущающая энциклопедия Scrapy отмечает:
  1. ответ представляет собойscrapy.http.response.html.HtmlResponseобъект. может быть выполненxpathиcssсинтаксис для извлечения данных.

  2. Извлеченные данные представляют собойSelectorилиSelectorListобъект. Если вы хотите получить строку в нем. тогда это должно быть выполненоgetallилиgetметод.

  3. метод getall: получитьSelectorВесь текст в . Что возвращается, так это список.

  4. метод получения: получитьSelectorпервый текст в . Возврат является типом str.

  5. Если данные анализируются обратно, они должны быть переданы в конвейер для обработки. тогда вы можете использоватьyieldвозвращаться. Или собрать все предметы. Наконец, используйте return для возврата.

  6. пункт: предложено вitems.pyОпределить модель в . Не используйте словари в будущем.

  7. конвейер: специально используется для сохранения данных. Часто используются три из этих методов.

    • open_spider(self,spider): Выполняется при открытии сканера.
    • process_item(self,item,spider): он будет вызываться, когда краулер передаст элемент.
    • close_spider(self,spider): будет вызываться при закрытии сканера. Чтобы активировать пипллин, он должен быть вsettings.pyв, наборITEM_PIPELINES. Пример выглядит следующим образом:
     ITEM_PIPELINES = {
        'qsbk.pipelines.QsbkPipeline': 300,
     }
    
JsonItemExporter и JsonLinesItemExporter:

При сохранении данных json вы можете использовать эти два класса, чтобы упростить операцию.

  1. JsonItemExporter: Это для добавления данных в память каждый раз. Наконец, он равномерно записывается на диск. Хорошо, что сохраненные данные — это данные, удовлетворяющие правилам json. Недостатком является то, что если объем данных относительно велик, он будет потреблять больше памяти. Пример кода выглядит следующим образом:

     from scrapy.exporters import JsonItemExporter
     ​
     class QsbkPipeline(object):
         def __init__(self):
             self.fp = open("duanzi.json",'wb')
             self.exporter = JsonItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
             self.exporter.start_exporting()
     ​
         def open_spider(self,spider):
             print('爬虫开始了...')
     ​
         def process_item(self, item, spider):
             self.exporter.export_item(item)
             return item
     ​
         def close_spider(self,spider):
             self.exporter.finish_exporting()
             self.fp.close()
             print('爬虫结束了...')
    
  2. JsonLinesItemExporter: это каждый звонокexport_itemсохранить этот элемент на жесткий диск. Минус в том, что каждый словарь — это строка, а весь файл — это не файл, удовлетворяющий формату json. Преимущество заключается в том, что каждый раз, когда данные обрабатываются, они сохраняются непосредственно на жестком диске, который не потребляет памяти, и данные относительно безопасны. Пример кода выглядит следующим образом:

     from scrapy.exporters import JsonLinesItemExporter
     class QsbkPipeline(object):
         def __init__(self):
             self.fp = open("duanzi.json",'wb')
             self.exporter = JsonLinesItemExporter(self.fp,ensure_ascii=False,encoding='utf-8')
     ​
         def open_spider(self,spider):
             print('爬虫开始了...')
     ​
         def process_item(self, item, spider):
             self.exporter.export_item(item)
             return item
     ​
         def close_spider(self,spider):
             self.fp.close()
             print('爬虫结束了...')
    
CrawlSpider:

Нужно использоватьLinkExtractorиRule. Эти две вещи определяют конкретное направление рептилии.

  1. Метод разрешения установки правил: чтобы иметь возможность ограничить URL-адрес, который мы хотим. Не создавайте то же регулярное выражение, что и другие URL-адреса.
  2. Когда использовать отслеживание: если вам нужно следить за URL-адресом, который соответствует текущим условиям при сканировании страницы, установите для него значение True. В противном случае установите Fasle.
  3. При каких обстоятельствах следует указать обратный вызов: Если страница, соответствующая этому URL-адресу, предназначена только для получения дополнительных URL-адресов и не нуждается в данных, содержащихся в ней, то обратный вызов не может быть указан. Если вы хотите получить данные на странице, соответствующей URL-адресу, вам необходимо указать обратный вызов.
Скребковая оболочка:
  1. Нам удобно сделать тестовый код извлечения данных.
  2. Если вы хотите выполнить команду scrapy, нет сомнений, что вы должны сначала войти в среду, в которой находится scrapy.
  3. Если вы хотите прочитать информацию о конфигурации проекта, вы должны сначала войти в проект. повторно выполнитьscrapy shellЗаказ.
Имитация входа в Renren.com:
  1. Если вы хотите отправить почтовый запрос, рекомендуется использоватьscrapy.FormRequestметод. Данные формы могут быть легко указаны.
  2. Если вы хотите отправлять почтовые запросы в начале краулера, вам следует переписатьstart_requestsметод. В этом методе отправьте почтовый запрос.

\