English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Записка:久闻Python-фреймворка для веб-скрейпинга. В последние дни изучал Scrapy, одну из его веб-скрейпинговых рамок, и хочу поделиться своим пониманием. Если есть ошибки в изложении, пожалуйста, исправьте их, гуру.
Первый раздел: Начальное знакомство с Scrapy
Scrapy - это приложение-фреймворк, написанный для захвата данных веб-сайтов, извлечения структурированных данных. Он может быть применен в программах для(data mining, обработки информации или хранения исторических данных и т.д.).
Он был создан дляЗахватка страницы(точнее говоря,Сетевая захватка) разработан, также может быть применен для получения данных, возвращаемых API (напримерAmazon Associates Web Services) или общим сетевому пауку.
Этот документ将通过 представление концепций, лежащих в основе Scrapy, чтобы вы могли понять его принцип работы и определить, является ли Scrapy тем, что вам нужно.
Когда вы готовы начать свой проект, вы можете обратиться кВведение в обучение.
Второй раздел: Обзор установки Scrapy
Платформа выполнения фреймворка Scrapy и связанные вспомогательные инструменты
Вы можете использовать pip для установки Scrapy (рекомендуется использовать pip для установки Python package).
pip install Scrapy
Процесс установки в Windows:
1. После установки Python 2.7 вам нужно изменить переменную окружения PATH, добавив исполняемые файлы Python и дополнительные скрипты в системный путь. Добавьте следующие пути в PATH:
C:\Python27\;C:\Python27\Scripts\;
Кроме того, можно использовать команду cmd для настройки Path:
c:\python27\python.exe c:\python27\tools\scripts\win_add2path.py
После завершения установки и конфигурации вы можете выполнить команду python --version, чтобы проверить версию установленного Python. (如图所示)
2, Изhttp://sourceforge.net/projects/pywin32/Установитьpywin32
Пожалуйста, убедитесь, что загружена версия, соответствующая вашей системе (win32 или amd64)
Изhttps://pip.pypa.io/en/latest/installing.htmlУстановить pip
3, Откройте окно командной строки и убедитесь, что pip установлен правильно:
pip --version
4、До сих пор Python 2.7 и pip работают корректно. Далее устанавливаем Scrapy:
pip install Scrapy
Таким образом, установка Scrapy в Windows завершена.
Третий раздел, Введение в Scrapy.
1、Создайте проект Scrapy в cmd.
scrapy startproject tutorial
H:\python\scrapyDemo>scrapy startproject tutorial Новый проект Scrapy 'tutorial', используя каталог шаблонов 'f:\\python27\\lib\\site-packages\\scrapy\\templates\\project', создан в: H:\python\scrapyDemo\tutorial Вы можете запустить ваш первый спайдер с помощью: cd tutorial scrapy genspider example example.com
2、Структура каталога файлов такова:
.
Анализ структуры Scrapy фреймворка:
3、Написать простого паука
1、В файле item.py настроить поля для сбора данных на страницах.
# -*- coding: utf-8 -*- # Определите модели для ваших собранных данных # # См. документацию в: # http://doc.scrapy.org/en/latest/topics/items.html import scrapy from scrapy.item import Item, Field class TutorialItem(Item): title = Field() author = Field() releasedate = Field()
2、В файле tutorial/spiders/spider.py записать сайт для сбора данных и определить поля для сбора данных.
# -*-coding:utf-8-*- import sys from scrapy.linkextractors.sgml import SgmlLinkExtractor from scrapy.spiders import CrawlSpider, Rule from tutorial.items import TutorialItem reload(sys) sys.setdefaultencoding("utf-8") class ListSpider(CrawlSpider): # Название спайдера name = "tutorial" # Установка задержки загрузки download_delay = 1 # Разрешенные домены allowed_domains = ["news.cnblogs.com"] # Начальные URL start_urls = [ "https://news.cnblogs.com" ] # Параметры для извлечения данных, без callback означает рекурсивное извлечение данных для этого класса URL rules = ( Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/page/\d',))), Rule(SgmlLinkExtractor(allow=(r'https://news.cnblogs.com/n/\d+',)), callback='parse_content'), ) # 解析内容函数 def parse_content(self, response): item = TutorialItem() # 当前URL title = response.selector.xpath('//div[@id="news_title"]')[0].extract().decode('utf-8') item['title'] = title author = response.selector.xpath('//div[@id="news_info"]/span/a/text()')[0].extract().decode('utf-8') item['author'] = author releasedate = response.selector.xpath('//div[@id="news_info"]/span[@class="time"]/text()')[0].extract().decode(' 'utf-8') item['releasedate'] = releasedate yield item
3、在tutorial/pipelines.py管道中保存数据。
# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html import json import codecs class TutorialPipeline(object): def __init__(self): self.file = codecs.open('data.json', mode='wb', encoding='utf-8')#数据存储到data.json def process_item(self, item, spider): line = json.dumps(dict(item)) + "\n" self.file.write(line.decode("unicode_escape")) return item
4. Настройте среду выполнения в tutorial/settings.py.
# -*- coding: utf-8 -*- BOT_NAME = 'tutorial' SPIDER_MODULES = ['tutorial.spiders'] NEWSPIDER_MODULE = 'tutorial.spiders' # Запретить cookies, предотвратить бан COOKIES_ENABLED = False COOKIES_ENABLES = False # Установить Pipeline, здесь реализуется запись данных в файл ITEM_PIPELINES = { 'tutorial.pipelines.TutorialPipeline': 300 } # Установить максимальную глубину паука DEPTH_LIMIT = 100
5. Создайте файл main и выполните код паука.
from scrapy import cmdline cmdline.execute("scrapy crawl tutorial".split())
В конце концов, после выполнения main.py в файле data.json можно получить json данные сбора.
Вот и все, что касается этой статьи, надеюсь, это поможет вам в изучении.我们也希望大家多多支持呐喊教程。
Заявление: содержимое этой статьи взято из Интернета, авторские права принадлежат соответствующему автору. Контент предоставлен пользователями Интернета, загружен самостоятельно, сайт не обладает правами собственности, не underwent редактирование人工, и не несет ответственности за соответствующие юридические последствия. Если вы обнаружите содержание,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении,并提供 соответствующие доказательства. При подтверждении факта нарушения сайт немедленно удалят涉嫌侵权的内容。