Python 에서 Scrapy 파충류 사진 처리 상세 설명
사진 을 다운로드 하 는 방법 은 두 가지 가 있 습 니 다.하 나 는 Requests 모듈 을 통 해 get 을 보 내 다운 로드 를 요청 하 는 것 이 고 다른 하 나 는 Scrapy 를 사용 하 는 Images Pipeline 이미지 파이프 류 입 니 다.여 기 는 주로 후 자 를 말 합 니 다.
Scrapy 를 설치 할 때 이미지 처리 의존 패키지 Pillow 를 설치 하지 않 았 습 니 다.수 동 으로 설치 해 야 합 니 다.그렇지 않 으 면 파충 류 를 실행 하 는 중 오류 가 발생 했 습 니 다.
먼저 settings.py 에 그림 의 저장 경 로 를 설정 합 니 다.
IMAGES_STORE = 'D:/'
그림 처리 와 관련 된 옵션 은 다음 과 같 습 니 다.
# ,
IMAGES_MIN_HEIGHT = 110
IMAGES_MIN_WIDTH = 110
#
IMAGES_THUMBS = {
'small': (50, 50),
'big': (270, 270),
}
이전에 추출 한 내용 이 있 었 던 TuchongPipeline 류 는 ImagePipeline 을 사용 하면 추출 한 내용 을 모두 합 칠 수 있 지만 이미지 파이프 의 역할 을 잘 설명 하기 위해 저 희 는 ImagePipeline 류 를 따로 만 들 고 pipelines.py 파일 에 추가 하 며 함수 get 를 다시 불 러 옵 니 다.media_requests:
class PhotoGalleryPipeline(object):
...
class PhotoPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for (id, url) in item['images'].items():
yield scrapy.Request(url)
이전 글 에서 우 리 는 그림 의 URL 을 item['images']에 저 장 했 습 니 다.이것 은 사전 형식의 배열 입 니 다.예 를 들 어[{imgid: img_url},...],이 함수 에서 imgurl 을 추출 하여 scrapy.Request 요청 대상 으로 구축 하고 되 돌려 줍 니 다.모든 요청 은 그림 을 다운로드 하 는 동작 을 실행 합 니 다.settings.py 에 PhotoPipeline 을 등록 하고 추출 내용 의 파이프 보다 우선 순 위 를 높 여 그림 다운로드 가 내용 처리 보다 우선 하도록 합 니 다.그림 다운로드 가 성공 하지 못 하면 DropItem 이상 을 터치 하면 이 Item 의 처 리 를 중단 하고 불완전한 데이터 가 다음 파이프 에 들 어 가 는 것 을 방지 하기 위해 서 입 니 다.
ITEM_PIPELINES = {
'Toutiao.pipelines.PhotoGalleryPipeline': 300,
'Toutiao.pipelines.PhotoPipeline': 200,
}
파충류 scrapy crawl photo 를 실행 합 니 다.오류 가 없 으 면 설 정 된 저장 디 렉 터 리 에 full 디 렉 터 리 가 나타 납 니 다.다운로드 한 그림 입 니 다.파일 이름 처리
다운로드 한 파일 이름 은 그림 URL 로 sha1 인 코딩 을 통 해 얻 은 문자 입 니 다.0a79c461a 4062 ac383dc4fade7bc09f1384a 3910.jpg 와 유사 하여 file 을 다시 불 러 올 수 있 습 니 다.path 함수 에서 파일 이름 을 사용자 정의 합 니 다.예 를 들 어 원본 파일 이름 을 이렇게 유지 할 수 있 습 니 다.
...
def file_path(self, request, response=None, info=None):
file_name = request.url.split('/')[-1]
return 'full/%s' % (file_name)
...
위 에서 이렇게 처리 하면 이름 이 바 뀐 파일 이 덮어 쓰 이 는 것 을 피하 기 어렵 지만,매개 변수 request 에 정보 가 너무 많 지 않 아 그림 을 분류 하기 어렵 기 때문에 다시 불 러 오 는 item 로 바 꿀 수 있 습 니 다.completed 함수,다운로드 완료 후 그림 분류 작업.함수 itemcompleted 의 정의:
def item_completed(self, results, item, info)
매개 변수 에는 item 이 포함 되 어 있 습 니 다.저희 가 캡 처 한 모든 정보 가 있 습 니 다.매개 변수 results 는 그림 을 다운로드 한 결과 배열 입 니 다.다운로드 후의 경로 와 다운로드 성공 여 부 를 포함 합 니 다.내용 은 다음 과 같 습 니 다.
[(True,
{'checksum': '2b00042f7481c7b056c4b410d28f33cf',
'path': 'full/0a79c461a4062ac383dc4fade7bc09f1384a3910.jpg',
'url': 'http://www.example.com/files/product1.pdf'}),
(False,
Failure(...))]
이 함 수 를 다시 불 러 오 면 다운로드 한 그림 을 분류 디 렉 터 리 로 옮 기 고 파일 경 로 를 item 에 연결 하여 내용 과 그림 을 전체 로 유지 합 니 다.
def item_completed(self, results, item, info):
image_paths = {x['url'].split('/')[-1]: x['path'] for ok, x in results if ok}
if not image_paths:
# Item
raise DropItem("Item contains no files")
else:
# post_id
for (dest, src) in image_paths.items():
dir = settings.IMAGES_STORE
newdir = dir + os.path.dirname(src) + '/' + item['post_id'] + '/'
if not os.path.exists(newdir):
os.makedirs(newdir)
os.rename(dir + src, newdir + dest)
# item (image_paths items.py )
item['image_paths'] = image_paths
return item
다음은 원래 Tuchong Pipeline 류 에 데이터 베 이 스 를 기록 하 는 작업 에서 item[imagepaths']경로 정 보 를 로 컬 그림 링크 에 기록 합 니 다.Images Pipeline 처리 그림 외 에 Files Pipeline 은 파일 을 처리 할 수 있 습 니 다.사용 방법 은 그림 과 유사 합 니 다.사실은 Images Pipeline 은 Files Pipeline 의 하위 클래스 입 니 다.그림 도 파일 의 하나 이기 때 문 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.