English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
기록: python 크롤러 프레임워크의 이름을 이미 들었습니다. 최근 몇 일 동안 Scrapy 크롤러 프레임워크를 공부했으며, 이해한 내용을 공유하려고 합니다. 설명이 부적절하다면, 고인들이 수정해 주세요.
1. Scrapy 初窥
Scrapy는 웹 사이트 데이터를 크롤링하고 구조화된 데이터를 추출하기 위해 작성된 애플리케이션 프레임워크입니다. 데이터 매ining, 정보 처리 또는 역사 데이터 저장 등 다양한 프로그램에 적용할 수 있습니다.
최초에는페이지 크롤링(정확히는,네트워크 크롤링)를 설계한 것으로, API가 반환하는 데이터(예를 들어Amazon Associates Web Services) 또는 일반적인 웹 크롤러.
이 문서는 Scrapy 뒤에 있는 개념을 소개하여 Scrapy가 필요한지 확인하고, 작동 방식에 대해 이해하도록 도와줍니다.
프로젝트를 시작하려고 준비가 되었을 때, 다음을 참조할 수 있습니다.기초 튜토리얼。
2. Scrapy 설치 소개
Scrapy 프레임워크 실행 플랫폼 및 관련 보조 도구
Scrapy를 설치할 수 있습니다. pip을 사용하여 설치하는 것이 좋습니다.(Python 패키지를 설치하는 데 pip을 사용하는 것이 좋습니다.).
pip install Scrapy
Windows 설치 프로세스:
1Python 설치 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/installpywin32
다운로드된 버전이 시스템과 일치하는지 확인하세요(win32또는 amd64
다음에서https://pip.pypa.io/en/latest/installing.htmlpip 설치
3명령 프롬프트 창을 엽니다. pip이 올바르게 설치되었는지 확인하세요:
pip --버전
4현재까지 Python 2.7 pip이 올바르게 실행될 수 있음을 확인한 후, Scrapy를 설치합니다:
pip install Scrapy
이제 Windows에서 Scrapy 설치가 완료되었습니다.
3. Scrapy 초보자 가이드
1cmd에서 Scrapy 프로젝트를 생성합니다.
scrapy startproject tutorial
H:\python\scrapyDemo>scrapy startproject tutorial New Scrapy project 'tutorial', using template directory '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에서 캡쳐할 페이지의 필드 인스턴스를 구성합니다。
# -*- 코딩: 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 = ( ////page/ ////+ //div[@id="news_title"]-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"]//text()')[0].extract().decode( 'utf-8') item['releasedate'] = releasedate yield item
3、在tutorial/pipelines.py에 데이터 저장하다.
# -*- 코딩: 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에서 실행 환경을 설정합니다。
# -*- 코딩: utf-8 -*- BOT_NAME = 'tutorial' SPIDER_MODULES = ['tutorial.spiders'] NEWSPIDER_MODULE = 'tutorial.spiders' # 쿠키를 차단하여 ban되지 않도록 합니다 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 데이터를 얻습니다.
이것이 본문의 모든 내용입니다. 많은 도움이 되었기를 바랍니다. 또한, 나아가 튜토리얼의 지지를 부탁드립니다.
선언: 본문 내용은 인터넷에서 가져왔으며, 저작권은 원저자에게 있습니다. 인터넷 사용자가 자발적으로 기여하고 업로드한 내용으로, 이 사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임을 부담하지 않습니다. 저작권 문제가 있을 경우 메일을 notice#w로 보내 주세요.3codebox.com(메일을 보내면, #을 @으로 변경해 주세요. 신고하고 관련 증거를 제공하시면, 해당 내용이 사실이 확인되면 즉시 해당 내용을 제거합니다。)