scrapy 쉘
scrapy 쉘은 빠르게 거미를 실행하지 않고도 디버그 코드를 긁어 수있는 대화 형 쉘입니다. 그것은 원래 데이터 추출 코드를 테스트하는 데 사용하지만, 실제로는 일반 파이썬 쉘이기 때문에, 모든 유형의 코드를 테스트하는 데 사용할 수 있습니다.
테스트 XPath는 또는 CSS를 표현 쉘, 그들이 어떻게 작동하는지보고, 데이터가 페이지를 크롤링하려고 그들로부터 추출 하였다. 그것은 각 변경을 테스트하기 위해 거미를 실행하지 않고, 거미 식을 작성할 때 대화 형으로 테스트 할 수 있습니다.
당신이 잘 알고 Scrapy 셸을하고 나면, 당신은 그것을 개발하고 거미의 디버깅을위한 귀중한 도구를 찾을 수 있습니다.
구성 쉘
당신이 경우 IPython가 이상이 설치, scrapy 쉘 (대신 표준 파이썬 콘솔)를 사용합니다. 이 IPython의 더 강력한 콘솔, 지능형 자동 완성 및 컬러 출력 기능을 제공합니다.
Scrapy 설정하여 사용하도록 구성 할 수 있습니다 ipython
, bpython
또는 표준 python
쉘은, 상관없이 설치되지 않았습니다. 이것은 설정하면됩니다 SCRAPY_PYTHON_SHELL
나에 의한, 환경 변수를 scrapy.cfg ;
[설정]
쉘 = bpython
시작 쉘
사용하여 shell
다음 명령을 :
scrapy 쉘 <URL> # <URL> URL을 크롤
shell
또한 로컬 파일에 적용됩니다. 웹 페이지의 로컬 복사본을 재생하려면, 그것은 매우 편리합니다. shell
로컬 파일을 다음 구문을 이해 :
# UNIX 스타일 scrapy 쉘 ./path/to/의 file.html과의 scrapy 쉘 .. / 기타 / 경로 /로가 / file.html과 scrapy 쉘 / 절대 / 경로 /로가 / file.html과 #의 파일 URI scrapy 쉘 파일 : // /absolute/path/to/file.html
상대 파일 경로를 사용하는 경우, 사용하는 ./
(또는) ../
파일 경로에 저장된 것을 나타낸다
scrapy 쉘 ./index.html
사용 쉘
scrappyshell 평범한 파이썬 콘솔 (또는 IPython의 콘솔, 당신은 그것을있는 경우), 그것은 용이하게하기 위해 몇 가지 추가 바로 가기를 제공합니다.
사용 가능한 바로 가기
shelp () - 사용 가능한 개체 및 바로 가기의 목록을 인쇄 도움 FETCH (URL [리디렉션 = TRUE]) - 주어진 URL에서 새 응답을하고, 모든 관련 개체를 업데이트합니다. 당신은 지나가는 것을 방지하기 위해, HTTP의 3xx의 재 요청을 선택할 수 있습니다 FETCH (요청) - 주어진 요청에서 새 응답을하고, 관련 모든 개체를 업데이트합니다. 보기 (대응) - 로컬 웹 브라우저에서 해당 검사에 응답 열립니다. 이 외부 링크에 응답하여 상기 본체에 <기재> 태그에 추가한다 (예를 들어, 스타일 시트 및 이미지)를 올바르게 표시. 그러나,이 컴퓨터에 임시 파일을 만듭니다 참고 파일이 자동으로 삭제되지 않습니다.
사용 가능한 srapy 객체
Scrapy 쉘은 자동으로 같은 다운로드 페이지에서 몇 가지 편리한 객체를 생성 Response
객체와 Selector
(HTML 및 XML 컨텐츠) 객체.
이러한 개체는 다음과 같습니다
쉘 예 세션
여기에 일반적인 쉘 세션의 예입니다, 우리는 https://scrappy.org 페이지를 크롤링하고 https://reddit.com 페이지를 크롤링을 계속하기 시작합니다. 마지막으로, 우리는 그것을 게시하고 검색 (레딧) 요청 방법을 수정할 때 오류가 발생합니다. 스루 윈도우에서 세션 (UNIX 시스템) 형 CTRL-D 또는 Ctrl-Z의 끝까지.
당신이 테스트 할 때 변경되었을 수 있습니다, 당신이하려고 할 때이 페이지가 고정되지 않기 때문에 여기에서 추출 된 데이터가 동일하지 않을 수 있음을 유의하십시오. 이 예제의 목적은 스크랩 쉘 작업에 익숙해하는 것입니다.
첫째, 우리는 포탄을 발사 :
C : \ 사용자 \ 관리자> scrapy www.scrapy.org --nolog 쉘
그런 다음, 쉘 획득 URL (사용 scrapy 다운) 및 (당신이 이러한 행 통지합니다 가능한 개체 및 유용한 단축키 목록을 인쇄 [s]
접두사) :
우리가 객체를 사용하기 시작 후 :
[1]에서 : response.xpath ( ' // 타이틀 / 텍스트 () ' ) 갔지 () # 获取网页제목 아웃 [1] : ' Scrapy | 빠르고 강력한 스크래핑 및 웹 크롤링 프레임 워크 ' [에서 : (페치 5] ' https://www.osgeo.cn/scrapy/topics/shell.html ' ) # 切换网址 [에서 6] : response.xpath ( ' // // 타이틀 텍스트 () ' ) 갔지 () # 获取网页표제 출력 [6] : ' Scrapy 쉘 - Scrapy 1.7.0文档' 후 [ 7] = request.replace 요청 (METHOD = ' 포스트 ' ) #요청이 방식 POST 변경 요청입니다 [에서 . 8] : FETCH (요청시) # 새로운 URL 요청 위 [에서을 . 9] : Response.Status #의 응답 상태 코드 아웃 [9.] : 405 에서 [ 10] 에서 pprint 가져 pprint의 #을 수입 모듈 pprint 에서 [ 11.] 다음 pprint (Response.Headers) #의 인쇄 요청 헤더 {B ' 내용 - 형식 ' : [B ' 텍스트 / HTML ' , B ' 날짜 ' : [B ' (토), 10 04 8 월 2019 년 : GMT 8시 19분 ' , B ' 서버' : [B ' 의 nginx / 1.10.3 ' }] [에서 12] pprint (타입 (response.headers)) # 打印类型 < 클래스 ' scrapy.http.headers.Headers " >
응답을 확인하는 거미에서 쉘을 호출
때때로, 당신은 다음, 거기에 기대하는 응답 여부를 확인하는 경우에만, 거미 처리되는 점에 대한 응답을 확인하고 싶다.
이 작업은 사용하여 수행 할 수있는 scrapy.shell.inspect_response
기능.
여기 당신의 거미에서 호출하는 방법의 예입니다 :
수입 scrapy의 클래스 MySpider (scrapy.Spider) 이름 = " myspider " start_urls의 = [ " http://example.com " , " http://example.org " , " http://example.net " , ] DEF (자동 응답) 분석 : #은 우리는 하나 개의 특정 응답을 검사합니다. 만약 " .ORG " 에 response.url : 에서 scrapy.shell의 수입 inspect_response inspect_response (응답, 자기) #의 구문 분석 코드의 나머지.
당신이 거미를 실행하면, 당신은 같은 것을 얻을 것이다 :
2014년 1월 23일 17 : 48 : 31-0400 [scrapy.core.engine] DEBUG : 크롤링 (200) <GET http://example.com> (참조 자 : 없음) 2014년 1월 23일 17시 48분 31초 -0400 [scrapy.core.engine] DEBUG : 크롤링 (200) <GET http://example.org> (참조 자 : 없음) [S] 가능 Scrapy 개체 : [S] 러 0x1e16b50에서 <scrapy.crawler.Crawler 개체 > ... >>> response.url ' http://example.org '
그런 다음 작업 여부를 확인하기 위해 코드를 추출 할 수 있습니다 :
>>> response.xpath ( ' // H1 [클래스 = "FN"@] ' ) ]
아니, 싫어. 당신이 응답 기대하는 경우 그래서 당신은 웹 브라우저에 대한 응답으로 열어 볼 수 있습니다 :
>>> 도면 (대응)
트루
마지막으로, Ctrl-D를를 클릭 (또는 Windows CTRL-Z 클릭) 쉘을 종료하고 크롤링을 계속 :
>>> ^ D 2014년 1월 23일 17 : 50 : 03-0400 [scrapy.core.engine] DEBUG : 크롤링 (200) <GET http://example.net> (참조 자 : 없음) ...
당신이 사용할 수 있습니다 fetch
엔진이 차단 된 쉘을 폐지 되었기 때문에, 여기에 바로 가기를. 당신이 쉘을 떠날 때 위와 같이이 크롤링 중단 된 그러나 거미가 계속됩니다.
예 :
# - * - 코딩 : UTF-8 - * - 임포트 scrapy의 클래스 DowloadTaobaoSpider (scrapy.Spider) 이름 = ' dowload_taobao ' allowed_domains = ' www.taobao.com ' ] start_urls = ' http://www.taobao. COM / ' ] 데프 (자동 응답) 분석 : 경우 ' .COM ' 에서 response.url : 에서 scrapy.shell의 수입 inspect_response의 inspect_response (응답, 자기)