scrapy 파충류 프레임 실전

6325 단어
개발 환경
  • mac
  • pthon 3.6 이상
  • 개발 도구: pycharm
  • mogodb 3.6.5
  • mongo 클 라 이언 트 도구 robo mongo
  • Scrapy 소개
    Scrapy 는 기능 이 완 선 된 파충류 구조 로 강력 한 특성 을 제공 하여 기어 오 르 는 것 을 더욱 간단 하고 효율 적 으로 한다. 예 를 들 어:
  • HTML, XML 소스 데이터 선택 및 추출 내장 지원
  • spider 간 에 공유 되 는 재 활용 가능 한 필터 (즉 Item Loaders) 를 제공 하여 스마트 처리 오 르 기 데 이 터 를 내장 지원 합 니 다.
  • feed 내 보 내기 를 통 해 다 중 형식 (JSON, CSV, XML), 다 중 저장 백 엔 드 (FTP, S3, 로 컬 파일 시스템) 의 내장 지원
  • 을 제공 합 니 다.
  • 미디어 pipeline 을 제공 하여 기어 오 른 데이터 의 그림 (또는 기타 자원) 을 자동 으로 다운로드 할 수 있 습 니 다.
  • 높 은 확장 성.signals 를 사용 하여 디자인 된 API (미들웨어, extensions, pipelines) 를 사용 하여 기능 을 맞 출 수 있 습 니 다.
  • 내 장 된 미들웨어 및 확장 은 다음 기능 에 지원 합 니 다.
  • 쿠키 및 세 션 처리
  • HTTP 압축
  • HTTP 인증
  • HTTP 캐 시
  • user - agent 시 뮬 레이 션
  • robots.txt
  • 기어 오 르 기 깊이 제한
  • 기타
  • 비 영어 어족 에서 표준 적 이지 않 거나 잘못된 인 코딩 성명 에 대해 자동 검색 및 건장 한 인 코딩 지원 을 제공 합 니 다.
  • 템 플 릿 에 따라 파충류 생 성 을 지원 합 니 다.파충류 의 생 성 을 가속 화 하 는 동시에 대형 프로젝트 의 코드 가 더욱 일치 합 니 다.자세 한 내용 은 genspider 명령 을 참조 하 십시오.
  • 다 파충류 의 성능 평가, 실패 검 측 에 대해 확장 가능 한 상태 수집 도 구 를 제공 합 니 다.
  • 대화 형 셸 터미널 을 제공 합 니 다. XPath 표현 식 을 테스트 하고 파충류 의 작성 과 디 버 깅 에 큰 편 의 를 제공 합 니 다
  • System 서 비 스 를 제공 하고 생산 환경 에서 의 배치 와 운영 을 간소화 합 니 다
  • 웹 서 비 스 를 내장 하여 기 계 를 감시 하고 제어 할 수 있 습 니 다
  • Telnet 터미널 이 내장 되 어 있 습 니 다. Scrapy 프로 세 스에 Python 터미널 을 연결 하여 파충 류 를 보고 디 버 깅 할 수 있 습 니 다
  • Logging 은 기어 오 르 는 과정 에서 오 류 를 포착 하 는 데 편 의 를 제공 합 니 다
  • Sitemaps 기어 오 르 기 지원
  • 캐 시 된 DNS 해상도 기
  • 프로젝트 생 성
    우리 파충류 가 되 어 기어 가자.http://www.iteye.com/news다음 정 보 를 mongodb 에 저장 합 니 다.
    우선 로 컬 프로젝트 디 렉 터 리 에서 다음 작업 을 수행 합 니 다.
    scrapy startproject myspider --nolog  #myspider project_name
    

    프로젝트 구조 및 설명
  • scrapy.cfg: 프로젝트 의 프로필
  • myspider/: 이 프로젝트 의 python 모듈 입 니 다.나중에 코드 를 추가 하 겠 습 니 다.
  • myspider/items.py: 프로젝트 중의 item 파일.
  • myspider/pipelines.py: 프로젝트 중의 pipelines 파일.
  • myspider/settings.py: 프로젝트 의 설정 파일.
  • myspider/spiders/: spider 코드 를 설치 한 디 렉 터 리 입 니 다.
  • 캡 처 한 데이터 구조 정의 Scrapy Items
    items. py 추가 코드:
    class NewsItem(scrapy.Item):
        title = scrapy.Field()
        link = scrapy.Field()
        desc = scrapy.Field()
        publish_time = scrapy.Field()
    

    Spider 를 작성 하 다
    창설 iteyespider. py 파일
    기어 오 르 기 명령 을 집행 하 다.
    프로젝트 디 렉 터 리 에서 명령 행 실행
    scrapy crawl iteye  # iteye spider name
    

    pycharm 콘 솔 에 정 보 를 출력 하기 위해 서 는 main. py 를 쓰 고 이 파일 을 직접 실행 하면 됩 니 다.
    from scrapy import cmdline
    cmdline.execute('scrapy crawl iteye -o iteye_news.json'.split())
    

    이렇게 캡 처 한 데 이 터 는 모두 iteye 에 기록 되 었 습 니 다.news. json 에서 기본 인 코딩 은 유 니 코드 입 니 다.
    mongodb 에 데 이 터 를 저장 합 니 다.
  • settings. py 수정
  • #         
    ITEM_PIPELINES = {
       'myspider.pipelines.MyspiderPipeline': 300,
    }
    # mogo       
    mongo_host = '127.0.0.1'
    mongo_port = 27017
    mongo_db_name = 'iteye'
    mongo_db_collection = 'iteye_news'
    
  • pipeline. py 작성
  • 여기에 pymogo 가방 을 썼어 요.
    class MyspiderPipeline(object):
        def __init__(self):
            #        
            host = mongo_host
            port = mongo_port
            dbname = mongo_db_name
            sheetname = mongo_db_collection
            client = pymongo.MongoClient(host=host,port=port)
            mydb = client[dbname]
            self.post = mydb[sheetname]
    
        def process_item(self, item, spider):
            #     mongodb 
            data = dict(item)
            self.post.insert(data)
            return item
    

    mongo 기본 설치 설정 만 있 으 면 됩 니 다.
  • 실 행 된 효과 monogo 에서 iteye 데이터 베 이 스 를 만 들 고 캡 처 한 데 이 터 를 봅 니 다.
    db.getCollection('iteye_news').find({})
    

  • 에이전트 중간 부품 의 작성
    파충류 프로그램의 신분 을 숨 기기 위해 파충류 프로그램의 ip 이 사이트 에서 직접 사용 되 지 않도록 ip 대리 와 랜 덤 user 에이전트 두 가지 방식 을 사용 할 수 있 습 니 다.
    ip 에이전트 미들웨어
    middlewares. py 수정
    # ip     
    class my_proxy(object):
        def process_request(self,request,spider):
            #         ip
            request.meta['proxy'] = ''
            #           
            proxy_name_pwd = b''
            #        
            encode_name_pwd = base64.b64encode(proxy_name_pwd)
            #       
            request.headers['Proxy-Authorization'] = 'Basic' + encode_name_pwd.decode()
    

    user 에이전트 에이전트 중간 부품
    Python 에서 User Agent 를 설정 하지 않 으 면 프로그램 이 기본 인 자 를 사용 합 니 다. 이 User Agent 에는 Python 이라는 글자 가 있 습 니 다. 서버 에서 User Agent 를 검사 하면 User Agent 를 설정 하지 않 은 Python 프로그램 이 웹 사 이 트 를 정상적으로 방문 할 수 없습니다.
    middlewares. py 수정
    #   user agent
    class my_user_agent(object):
        def process_request(self,request,spider):
            USER_AGENT_LIST=[
                'MSIE (MSIE 6.0; X11; Linux; i686) Opera 7.23',
                'Opera/9.20 (Macintosh; Intel Mac OS X; U; en)',
                'Opera/9.0 (Macintosh; PPC Mac OS X; U; en)',
                'iTunes/9.0.3 (Macintosh; U; Intel Mac OS X 10_6_2; en-ca)',
                'Mozilla/4.76 [en_jp] (X11; U; SunOS 5.8 sun4u)',
                'iTunes/4.2 (Macintosh; U; PPC Mac OS X 10.2)',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:5.0) Gecko/20100101 Firefox/5.0',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0) Gecko/20100101 Firefox/9.0',
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:16.0) Gecko/20120813 Firefox/16.0',
                'Mozilla/4.77 [en] (X11; I; IRIX;64 6.5 IP30)',
                'Mozilla/4.8 [en] (X11; U; SunOS; 5.7 sun4u)'
            ]
            self.choice = random.choice(USER_AGENT_LIST)
            agent = random.choice(USER_AGENT_LIST)
            request.headers['User-Agent'] = agent
    

    미들웨어 설정 열기
    setting. py 수정
    #       ,543        ,      
    DOWNLOADER_MIDDLEWARES = {
       'myspider.middlewares.my_user_agent': 543,
       'myspider.middlewares.my_proxy': 544,
    }
    

    참고 자료
    python 기본 튜 토리 얼:http://www.runoob.com/python/python-tutorial.html
    Scrapy 입문 강좌:https://scrapy-chs.readthedocs.io/zh_CN/0.24/intro/tutorial.html

    좋은 웹페이지 즐겨찾기