전체 파충류 코드를 기록한, 나는 테스트 사이트를 상승했습니다. .
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) 반환 항목
결과 :