스크래피-쉘
기술
Scrapy 셸을 사용하면 스파이더를 사용하지 않고 오류없는 코드로 데이터를 스크랩 할 수 있습니다. Scrapy 셸의 주요 목적은 추출 된 코드, XPath 또는 CSS 표현식을 테스트하는 것입니다. 또한 데이터를 스크랩 할 웹 페이지를 지정하는 데 도움이됩니다.
셸 구성
쉘은 자동 완성, 색상 화 된 출력 등을 제공하는 강력한 대화 형 쉘인 IPython (대화 형 컴퓨팅에 사용됨) 콘솔 을 설치하여 구성 할 수 있습니다 .
Unix 플랫폼에서 작업하는 경우 IPython을 설치하는 것이 좋습니다. IPython에 액세스 할 수없는 경우 bpython 을 사용할 수도 있습니다 .
SCRAPY_PYTHON_SHELL이라는 환경 변수를 설정하거나 다음과 같이 scrapy.cfg 파일을 정의하여 쉘을 구성 할 수 있습니다.
[settings]
shell = bpython
셸 시작
Scrapy 셸은 다음 명령을 사용하여 시작할 수 있습니다.
scrapy shell <url>
URL의 URL이있는 데이터가 필요로 지정 긁어한다.
셸 사용
셸은 다음 표에 설명 된대로 몇 가지 추가 단축키와 Scrapy 객체를 제공합니다.
사용 가능한 단축키
Shell은 프로젝트에서 다음과 같은 사용 가능한 바로 가기를 제공합니다.
Sr. 아니요 | 바로 가기 및 설명 |
---|---|
1 | shelp() 도움말 옵션과 함께 사용 가능한 개체 및 바로 가기를 제공합니다. |
2 | fetch(request_or_url) 요청 또는 URL에서 응답을 수집하고 관련 개체가 올바르게 업데이트됩니다. |
삼 | view(response) 관찰을 위해 로컬 브라우저에서 주어진 요청에 대한 응답을보고 외부 링크를 올바르게 표시 할 수 있으며 응답 본문에 기본 태그를 추가합니다. |
사용 가능한 스크래피 개체
Shell은 프로젝트에서 다음과 같은 사용 가능한 Scrapy 개체를 제공합니다.
Sr. 아니요 | 개체 및 설명 |
---|---|
1 | crawler 현재 크롤러 개체를 지정합니다. |
2 | spider 현재 URL에 대한 스파이더가 없으면 새 스파이더를 정의하여 URL 또는 스파이더 개체를 처리합니다. |
삼 | request 마지막으로 수집 된 페이지에 대한 요청 개체를 지정합니다. |
4 | response 마지막으로 수집 된 페이지에 대한 응답 개체를 지정합니다. |
5 | settings 현재 Scrapy 설정을 제공합니다. |
쉘 세션의 예
scrapy.org 사이트를 스크랩 한 다음 설명 된대로 reddit.com에서 데이터 스크랩을 시작하겠습니다.
계속 진행하기 전에 먼저 다음 명령과 같이 셸을 시작합니다.
scrapy shell 'http://scrapy.org' --nolog
Scrapy는 위의 URL을 사용하는 동안 사용 가능한 개체를 표시합니다-
[s] Available Scrapy objects:
[s] crawler <scrapy.crawler.Crawler object at 0x1e16b50>
[s] item {}
[s] request <GET http://scrapy.org >
[s] response <200 http://scrapy.org >
[s] settings <scrapy.settings.Settings object at 0x2bfd650>
[s] spider <Spider 'default' at 0x20c6f50>
[s] Useful shortcuts:
[s] shelp() Provides available objects and shortcuts with help option
[s] fetch(req_or_url) Collects the response from the request or URL and associated
objects will get update
[s] view(response) View the response for the given request
다음으로 다음과 같이 객체 작업을 시작합니다.
>> response.xpath('//title/text()').extract_first()
u'Scrapy | A Fast and Powerful Scraping and Web Crawling Framework'
>> fetch("http://reddit.com")
[s] Available Scrapy objects:
[s] crawler
[s] item {}
[s] request
[s] response <200 https://www.reddit.com/>
[s] settings
[s] spider
[s] Useful shortcuts:
[s] shelp() Shell help (print this help)
[s] fetch(req_or_url) Fetch request (or URL) and update local objects
[s] view(response) View response in a browser
>> response.xpath('//title/text()').extract()
[u'reddit: the front page of the internet']
>> request = request.replace(method="POST")
>> fetch(request)
[s] Available Scrapy objects:
[s] crawler
...
스파이더에서 셸을 호출하여 응답 검사
해당 응답을받을 것으로 예상되는 경우에만 스파이더에서 처리 된 응답을 검사 할 수 있습니다.
예를 들어-
import scrapy
class SpiderDemo(scrapy.Spider):
name = "spiderdemo"
start_urls = [
"http://mysite.com",
"http://mysite1.org",
"http://mysite2.net",
]
def parse(self, response):
# You can inspect one specific response
if ".net" in response.url:
from scrapy.shell import inspect_response
inspect_response(response, self)
위의 코드에서 볼 수 있듯이 스파이더에서 쉘을 호출하여 다음 함수를 사용하여 응답을 검사 할 수 있습니다.
scrapy.shell.inspect_response
이제 거미를 실행하면 다음 화면이 나타납니다.
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None)
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None)
2016-02-08 18:15:20-0400 [scrapy] DEBUG: Crawled (200) (referer: None)
[s] Available Scrapy objects:
[s] crawler
...
>> response.url
'http://mysite2.org'
다음 코드를 사용하여 추출 된 코드가 작동하는지 확인할 수 있습니다.
>> response.xpath('//div[@class = "val"]')
출력을 다음과 같이 표시합니다.
[]
위의 행은 빈 출력 만 표시했습니다. 이제 다음과 같이 응답을 검사하기 위해 쉘을 호출 할 수 있습니다.
>> view(response)
응답을 다음과 같이 표시합니다.
True