쉘 scrapy 프레임 워크

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 컨텐츠) 객체.

이러한 개체는 다음과 같습니다

  • crawler - 현재의  Crawler 객체입니다.
  • spider - 거미가 URL을 처리 알려진, 또는  Spider 거미를 찾을 수없는 URL이있는 경우와 비교.
  • request -A  Request 추출 된 객체의 마지막 페이지. 당신은 수정이 요청을 사용  replace() 하거나 사용하는  fetch 바로 가기를.
  • response -A  Response 객체는 마지막 페이지의 추출물을 포함
  • settings - 현재 구성 scrapy

쉘 예 세션

여기에 일반적인 쉘 세션의 예입니다, 우리는 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 (응답, 자기)

 

추천

출처www.cnblogs.com/songzhixue/p/11331141.html