다층 여러 페이지를 크롤링 scrapy 사진 전체 폴더의 이름을 변경 다른 폴더에 저장됩니다

전체 파충류 코드를 기록한, ​​나는 테스트 사이트를 상승했습니다. .

items.py

1  가져 오기 scrapy
 2  
3  
4  클래스 : DemoItem (scrapy.Item)
 (5)      (가) 필드에서 DEFINE # 에 대한 처럼 여기 항목 바탕 화면 :
 6      = 폴더 _ scrapy.Field () # 페이지를 선택할 경우 대신 전체 폴더의 폴더 이름으로 주제 나 제목,
 7      #img_name = scrapy.Field 사용하지 않는하지 않을 경우 () # 추출물 그림의 이름,
 8      img_url = scrapy.Field () # 이미지 링크를

spider.py

1 # - * - 코딩 : UTF- 8 - - *
 2  임포트 scrapy
 3  에서 demo.items가 DemoItem에게 가져
 4  
5  
6  클래스 : LogosSpider (scrapy.Spider)
 7      명 = ' 로고 ' 
8      [allowed_domains의 =를 ' tttt8.net를 ' ]
 9      #start_urls = ' http://www.tttt8.net/category/legbaby/ ' ]
 10      #start_urls 용 = ' http://www.tttt8.net/category/ugirls/ ' ]
 11      #start_urls = 'http://www.tttt8.net/category/kelagirls/ ' ]
 (12)가      start_urls = ' http://www.tttt8.net/category/xiurenwang/micatruisg/ ' ]
 (13)는      페이지가 구축에 사용되는 #은 페이지 회전 링크
 14      페이지 = 1 
15  
16      DEF 파싱 (자동 응답) :
 17          # 모든 열의 목록을 추출하는
 18          li_list의 response.xpath = ( ' // * / 리 [위에서 ID = "post_container"@ 언급] ' )
 (19)          를 들어 리튬 li_list :
 20는              실시 예 #
 21 인              = 아이템 DemoItem ()
 22 인             # 나중에 저장 폴더 이름 여기에만 이름 열 추출
 23 것은              아이템 [ ' FOLDER_NAME ' = li.xpath ( ' ./div [2] / H2 / A / 텍스트 () ' ) .extract_first ()
 24              # 추출물은 두 페이지, 두 페이지 작업 기능을 할 준비가 링크
 (25)              (next_plink = li.xpath을 ' ./div[1]/a/@href ' ) .extract_first를 ()
 (26)는              페이지 인스턴스에 #item을 두 페이지에 내용을받은
 27              수율 scrapy.Request ({URL = next_plink, 콜백 = self.parse2, 메타 = ' 항목 ' : 항목})
 28          페이지 목록 / 터닝 # 자기 차례 다른 방법을 찾기 페이지는 온라인 많이,이 간단한 구조를 생각
 (29)         = response.xpath의 page_list ( ' // DIV의 [의 @ 클래스 = "매김"] / A / @ href를 ' ()) .extract
 30          # 마지막 페이지 찾을
 31은          [- LAST_PAGE page_list = . 1 ]
 32          # 추출 최대 페이지
 (33)는          MAX_NUM = INT (LAST_PAGE의 [- 2 ])
 (34)는          # 링크의 페이지를 선회하여 구성된
 35          IF self.page <= MAX_NUM :
 36              self.page + = . 1 
37              new_page_url self.start_urls = [ 0 ] + ' 페이지 / ' + STR (self.page) + ' /' 
38 인              수율 scrapy.Request (URL = new_page_url 콜백 = self.parse)
 39  
40      DEF의 parse2 (자동 응답)
 (41)는          콘텐츠 페이지를 수신 # 어댑터 요청 플립 또는 폴더가 손실되고 주어지는
 42          항목 = response.meta [ ' 항목 ' ]
 43          P_LIST의 response.xpath = ( ' //'* @ 상기 ID = "POST_CONTENT"를 언급] / ρ-/ IMG ' )
 44          다운로드 추출물 이미지 pepeline하기 # 정상 링크
 45           IMG P_LIST :
 46이다              img_url img.xpath = ( ' ./@src ' ) .extract_first ()
 47             # 이것은 [], 픽쳐 다운로드 기능은리스트 형식이 필요 괄호 추가해야
 48              항목 [ ' img_url는 ' ] = [img_url]
 49              항복 항목
 50          페이지리스트 # 두 개의 페이지가, 후속 요청 수율
 51은          next_page_list = response.xpath ( ' [. 1] // * @ ID ='콘텐츠 '] / 된 div / DIV의 [. 3 / 된 DIV [2] / A / @ href를 ' ) .extract ()
 (52)은          위해 next_page next_page_list :
 53이다              # 여기에 우리가 메타를 추가해야합니다, 그렇지 않으면 두 플립 오류에, 여기에서 나는 오랜 시간을 발견했다.
54은              수율 scrapy.Request (URL = next_page 콜백 = self.parse2 메타 = { ' 항목 ' : 품목})

settings.py

1 # - * - 코딩 : UTF- 8 - * -
 2  
3  
4 BOT_NAME = ' 데모 ' 
5 SPIDER_MODULES 용 = ' demo.spiders ' ]
 6 NEWSPIDER_MODULE = ' demo.spiders ' 
7  
8  #存储路径和헤더
 9 IMAGES_STORE = ' D : \ 사진 ' 
10 USER_AGENT = ' 모질라 / 5.0 (윈도우 NT 6.1; WOW64) AppleWebKit / 537.36 (게코 같은 KHTML) 크롬 / 50.0.2661.102 사파리 / 537.36 ' 
(11)  
(12) DOWNLOAD_DELAY = 0.2 
(13) 로봇 # 끄기
 14 ROBOTSTXT_OBEY = 거짓
 15  
16 ITEM_PIPELINES = {
 17.      ' demo.pipelines.DemoPipeline ' : 300 ,
 18이다  }
 . 19  #은 지정된 필드 다운로드
 20은 IMAGES_URLS_FIELD = ' img_url '

pipelines.py

. (1)  오기 Scrapy
 2  에서 scrapy.exceptions 오기 DropItem
 . 3  에서 scrapy.pipelines.images 오기 ImagesPipeline
 4.  
5.  
6 개.  클래스 DemoPipeline (ImagesPipeline)
 . 7      수정없이 # 재기록 고정 기능
 8.      DEF get_media_requests (자기, 아이템 정보)
 . 9           img_url 에서 아이템 [ ' img_url ' ]
 (10)              의 이름을 변경하므로 세대 메타를 사용하여 다른 기능을 다운로드 한 후 #
 11.              수율 scrapy.Request (img_url 메타 = { ' 항목 ' : 품목})
 (12)은  
13 인     FILE_PATH DEF (자기, 요청, 응답은 = 없음, INFO = 없음)
 14          상품 request.META = ' 항목 ' ]
 15          FOLDER_NAME = 아이템 [ ' FOLDER_NAME ' ]
 16          # 상품 img_name = ' img_name ' 아니오 이름] # 화상 이 명령이 사용되지
 17          # 이름 마지막 이름으로 URL 문자열을 찍은 사진 때문에 사용되지 않는다
 (18)가          image_guid request.url.split = ( ' / ' ) - . 1 ]
 . 19          img_name = image_guid
 20는          # 명칭 = img_name + image_guid
 21은         이름 = 이름 + # ' .JPG ' 
(22)는          # 0 폴더를 대표 대표 파일
 (23)은          파일 이름 = U ' {0} / {1} ' .format (FOLDER_NAME, img_name)
 24 리턴 파일명
 (25) (26)는     # 재기록 고정 함수 수정할 필요
 (27)     DEF는 (자체, 결과, 항목, 정보) item_completed 없습니다 :
 28          image_paths의 = [X [ ' 경로 ' ] 에 대한 확인, X를  결과 IF OK]
 (29) IF 하지 image_paths :
 30          
                        DropItem 인상 ( ' 이미지 실패 다운로드 ' )
 (31)          반환 항목

결과 :

 

 

 

추천

출처www.cnblogs.com/passagain/p/11607711.html