>  기사  >  백엔드 개발  >  Douban 영화 이미지 크롤링 예

Douban 영화 이미지 크롤링 예

PHP中文网
PHP中文网원래의
2017-06-20 15:26:401965검색

먼저 효과를 적용해 보세요

 

둘째, Scrapy를 설치해서 사용하세요

 공식 홈페이지:.

  설치 명령: pip install Scrapy

  설치가 완료되었습니다. 기본 템플릿을 사용하여 새 프로젝트를 만듭니다. 명령: scrapy startproject xx

 

 위의 그림은 스크래피의 작동 메커니즘을 생생하게 보여줍니다. 각 부분의 구체적인 의미와 기능은 바이두에서 확인할 수 있으므로 여기서는 자세히 다루지 않겠습니다. 일반적으로 우리가 해야 할 일은 다음 단계입니다.

  1) 기타 구성의 경우 사용자의 요구 사항에 따라 문서 구성을 볼 수 있습니다.

DEFAULT_REQUEST_HEADERS = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.10 Safari/537.36'}
DOWNLOAD_TIMEOUT = 30IMAGES_STORE = 'Images'

  2) Model 클래스와 동일한 items 클래스를 정의합니다. 예:

class CnblogImageItem(scrapy.Item):
    image = scrapy.Field()
    imagePath = scrapy.Field()
    name = scrapy.Field()

   3) 다운로드 미들웨어의 기능은 요청을 보내는 방법을 사용자 정의하는 것입니다. 일반적으로 에이전트를 처리하기 위한 미들웨어, PhantomJs를 위한 미들웨어 등이 있습니다. 여기서는 프록시 미들웨어만 사용합니다.

class GaoxiaoSpiderMiddleware(object):def process_request(self, request, spider):if len(request.flags) > 0 and request.flags[0] == 'img':return None
        driver = webdriver.PhantomJS()# 设置全屏        driver.maximize_window()
        driver.get(request.url)
        content = driver.page_source
        driver.quit()return HtmlResponse(request.url, encoding='utf-8', body=content)class ProxyMiddleWare(object):def process_request(self, request, spider):
        request.meta['proxy'] = 'http://175.155.24.103:808'

  4) Spider에서 전달된 항목 처리, 엑셀 저장, 데이터베이스 저장, 사진 다운로드 등에 사용되는 파이프라인을 작성합니다. 공식 이미지 다운로드 프레임워크를 사용하여 이미지를 다운로드하는 코드는 다음과 같습니다.

class CnblogImagesPipeline(ImagesPipeline):
    IMAGES_STORE = get_project_settings().get("IMAGES_STORE")def get_media_requests(self, item, info):
        image_url = item['image']if image_url != '':yield scrapy.Request(str(image_url), flags=['img'])def item_completed(self, result, item, info):
        image_path = [x["path"] for ok, x in result if ok]if image_path:# 重命名if item['name'] != None and item['name'] != '':
                ext = os.path.splitext(image_path[0])[1]
                os.rename(self.IMAGES_STORE + '/' +  image_path[0], self.IMAGES_STORE + '/' + item['name'] + ext)
            item["imagePath"] = image_pathelse:
            item['imagePath'] = ''return item

  5) Spider 클래스를 직접 작성하세요. Spider의 역할은 일부 정보를 구성하고, URL 요청을 시작하고, 응답 데이터를 처리하는 것입니다. 여기에서 다운로드 미들웨어 구성 및 파이프라인을 설정 파일에 배치할 수 있습니다. 여기에서는 프로젝트에 여러 개의 스파이더가 포함되어 있고 서로 다른 다운로드 미들웨어를 사용하므로 별도로 구성했습니다.

# coding=utf-8import sysimport scrapyimport gaoxiao.itemsimport json
reload(sys)
sys.setdefaultencoding('utf-8')class doubanSpider(scrapy.Spider):
    name = 'douban'allowed_domains = ['movie.douban.com']
    baseUrl = ''start = 0
    start_urls = [baseUrl + str(start)]
    custom_settings = {'DOWNLOADER_MIDDLEWARES': {'gaoxiao.middlewares.ProxyMiddleWare': 1,#             'gaoxiao.middlewares.GaoxiaoSpiderMiddleware': 544        },'ITEM_PIPELINES': {'gaoxiao.pipelines.CnblogImagesPipeline': 1,
        }
    }def parse(self, response):
        data = json.loads(response.text)['subjects']for i in data:
            item = gaoxiao.items.CnblogImageItem()if i['cover'] != '':
                item['image'] = i['cover']
                item['name'] = i['title']else:
                item['image'] = ''yield itemif self.start < 400:
            self.start += 20yield scrapy.Request(self.baseUrl + str(self.start), callback=self.parse)

위 내용은 Douban 영화 이미지 크롤링 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.