간단한 방법으로 수백만 개의 Google Serp(Python Scrapy Spider) 캡처

구글은 거의 모든 면에서 논쟁의 여지가 없는 검색엔진의 왕이다.모든 용례의 최종 데이터 원본으로 만들다.
만약 이 데이터에 접근하고 싶다면 수동으로 데이터를 추출하거나 제3자에게 비싼 데이터 구독료를 지불하거나 자신의 scrape를 구축하여 데이터를 추출해야 한다.
본고에서 구글 스크레이퍼를 구축하는 가장 간단한 방법을 보여 드리겠습니다. 이 스크레이퍼는 매일 몇 줄의 코드만 있으면 수백만 페이지의 데이터를 추출할 수 있습니다.
Scrapy와 Scraper API의 에이전트/자동 검색 기능을 결합하면 Google Scraper는 모든 Google 쿼리에서 엔진 결과를 검색하고 각 결과에 다음 내용을 반환하는 Google Scraper를 구축합니다.
  • 직함
  • 링크
  • 관련 링크
  • 설명
  • 세그먼트
  • 이미지
  • 축소판 그림
  • 출처 및 추가
  • 키워드, 지리적 영역, 언어, 결과 수, 특정 영역의 결과를 지정하고 보안 결과만 되돌려주며 파라미터를 사용하여 검색 조회를 최적화할 수 있다.가능성은 거의 무한하다.
    The code for this project is available on GitHub here.
    이 설명서의 용도는 다음과 같습니다.

  • Scraper API 인스타그램은 매우 적극적인 스크래치 기능이 있기 때문에 우리의 대리 해결 방안으로 삼는다.등록free account here하면 5000개의 무료 요청을 할 수 있습니다.

  • ScrapeOps 저희 삽을 무료로 감시하고 문제가 발생할 때 알려 주십시오.현장 프레젠테이션: ScrapeOps Demo

  • Scraper API의 Autoparse 기능을 사용하여 Google을 조회하는 방법


    저희가 Scraper API를 사용하는 데는 두 가지 이유가 있습니다.

  • 대리님, 그래서 저희는 막히지 않을 거예요.

  • 해석, 그래서 우리는 자신의 해석기를 작성하는 것을 걱정할 필요가 없다.
  • Scraper API는 에이전트의 회전 및 관리와 관련된 모든 것을 처리하는 에이전트 관리 API로서 요청이 금지되지 않습니다.이것은 구글과 같은 어려운 사이트에 있어서는 매우 좋은 것이다.
    그러나 구글이나 아마존 같은 사이트에서 Scraper API가 특히 유용한 이유는 자동 해석 기능을 무료로 제공하기 때문에 사용자가 자신의 해석기를 작성하고 유지할 필요가 없기 때문이다.
    Scraper API’s autoparse 구글 검색이나 구글 쇼핑 기능을 사용하면 모든 HTML이 자동으로 JSON 형식으로 해석된다.깎는 과정을 크게 간소화하였다.
    이러한 편리한 기능을 활용하려면 요청에 다음 매개 변수를 추가하기만 하면 됩니다.
     "&autoparse=true"
    
    Scrapy를 통해 이 인자가 포함된 HTTP 요청을 보내며, Scrapy는 지정한 키워드에 따라 구글 결과를 긁어냅니다.결과는 JSON 형식으로 반환되고 Python을 사용하여 해석됩니다.

    Scrapy 설치 및 설정


    우선, 이 강좌의 요구는 매우 간단하다.
    • Python 버전 3 이상 필요
    • 및 pip 설치에 필요한 패키지
    따라서 Scrapy를 설치하기 위해 터미널에서 다음 명령만 실행하면 두 가지 기능을 모두 사용할 수 있다고 가정합니다.
    pip install scrapy
    
    Scrapy는 모든 패키지 및 프로젝트 파일이 있는 기본 폴더를 자동으로 만듭니다.그러므로 폴더로 이동하여 다음 명령을 실행합니다.
    scrapy startproject google_scraper
    cd google_scraper
    scrapy genspider google api.scraperapi.com
    
    First Scrapy는 프로젝트 이름인 Google scraper라는 새 프로젝트 폴더를 만듭니다.그리고 이 폴더로 이동해서 "genspider"명령을 실행하면 "구글"이라는 웹 스크레이퍼를 생성합니다.
    현재, 설정 파일 한 무더기, scraper를 포함하는 '스파이더' 폴더, 패키지 파일을 포함하는 파이톤 모듈 폴더를 보실 수 있습니다.

    Google 조회를 위한 URL 만들기


    예상대로 구글은 매우 표준적이고 조회하기 쉬운 URL 구조를 사용했다.구글을 조회하기 위한 URL을 만들려면 필요한 데이터의 URL 인자만 알아야 한다.이 강좌에서, 나는 대부분의 웹 캡처 프로젝트에 가장 유용한 매개 변수를 사용할 것이다.
    각 구글 검색 쿼리는 다음과 같은 기본 URL로 시작합니다.
    http://www.google.com/search
    
    그런 다음 다음 매개변수를 하나 이상 추가하여 질의를 구성할 수 있습니다.
  • 는 q의 검색 키워드 파라미터를 표시합니다. 예를 들어 http://www.google.com/search?q=tshirt는 'tshirt' 키워드를 포함하는 결과를 검색합니다.
  • 언어 매개 변수hl.예: http://www.google.com/search?q=tshirt&hl=en
  • as sitesearch 매개 변수로 검색할 영역(또는 사이트)을 지정합니다.예: http://www.google.com/search?q=tshirt&as_sitesearch=amazon.com
  • 페이지당 결과 수의num 매개 변수(최대값은 100)를 지정합니다.예: http://www.google.com/search?q=tshirt&num=50
  • 오프셋 점의 시작 매개변수를 지정합니다.예: http://www.google.com/search?q=tshirt&start=100
  • 보안 결과에 대한 보안 매개 변수만 내보냅니다.예: http://www.google.com/search?q=tshirt&safe=active
  • 구글을 조회하는 데 더 많은 매개 변수가 있는데, 예를 들면 날짜, 인코딩, 심지어는 '또는' 와 '등 연산자도 있어서 기본 논리를 실현할 수 있다.

    구글 검색 검색 URL 구축


    다음은 구글 검색 검색 URL을 구축하는 데 사용할 함수입니다.이것은 q,num, as sitesearch 매개 변수를 위한 키 값 쌍을 포함하는 사전을 생성합니다.매개 변수를 더 추가하려면 여기에 추가할 수 있습니다.
    사이트를 지정하지 않으면 as sitesearch 매개변수가 없는 URL이 반환됩니다.지정하면 netloc(예를 들어 amazon.com)을 사용하여 네트워크 위치를 추출한 다음 이 키 값을 구글 dict에 추가한 다음 URL에서 다른 매개 변수로 인코딩합니다.
    from urllib.parse import urlparse
    from urllib.parse import urlencode
    
    def create_google_url(query, site=''):
       google_dict = {'q': query, 'num': 100, }
       if site:
           web = urlparse(site).netloc
           google_dict['as_sitesearch'] = web
           return 'http://www.google.com/search?' + urlencode(google_dict)
       return 'http://www.google.com/search?' + urlencode(google_dict)
    

    Scraper API를 통해 에이전트에 연결


    구글과 같은 인터넷 서비스를 캡처할 때 합리적인 규모로 캡처하려면 에이전트를 사용해야 한다.만약 네가 이렇게 하지 않는다면, 너는 그것의 개미 좀비 공격 대책에 표시될 수도 있고, 너의 IP 사용이 금지될 수도 있다.고맙습니다. Scraper API’s proxy solution for free for up to 5,000 API calls 최대 10개의 병렬 라인을 사용할 수 있습니다.또한 지리적 위치, JS 렌더링, 주택 속성 등 Scraper API의 고급 기능도 사용할 수 있습니다.
    에이전트를 이용하려면 here로 가서 무료로 등록하면 된다.프록시 연결을 만들기 위해 프록시 키가 필요하기 때문에, 대시보드에서 API 키를 찾으십시오.
    대리인은 당신의 인터넷 거미 속으로 쉽게 실현할 수 있습니다.다음 get url 함수에서, 우리는 Scraper API 키와create Google url 함수에 구축된 url을 사용하여 유효한 부하를 만들 것입니다.여기에 자동 방화 기능을 활성화하고 에이전트를 미국으로 설정합니다.
    def get_url(url):
       payload = {'api_key': API_KEY, 'url': url, 'autoparse': 'true', 'country_code': 'us'}
       proxy_url = 'http://api.scraperapi.com/?' + urlencode(payload)
       return proxy_url
    
    Scraper API의 프록시 풀을 통해 요청을 보내려면 검색 URL을 Scraper API의 프록시 URL에 추가하기만 하면 됩니다.이것은 우리가 구글에서 요청한 정보를 되돌려주고, 잠시 후에 이를 분석할 것이다.

    구글 검색


    start requests 함수는 모든 기능을 시작합니다.이것은 조회 목록을 옮겨다니며, 이 조회는 조회 url의 키워드로create Google url 함수에 전송됩니다.
    def start_requests(self):
           queries = ['scrapy’, ‘beautifulsoup’]
           for query in queries:
               url = create_google_url(query)
               yield scrapy.Request(get_url(url), callback=self.parse, meta={'pos': 0})
    
    그런 다음 Google Search에 Scrapy의 수익률을 요청으로 사용하여 Google URL 함수에 설정한 프록시 연결을 통해 Google 조회 URL을 전송합니다.결과(JSON 형식이어야 함)는 처리 함수로 전송됩니다.우리는 또한 {pos':0} 키 값을 원 매개 변수에 추가합니다. 이 매개 변수는 긁어낸 페이지 수만 계산하는 데 사용됩니다.

    구글 검색 결과 삭제


    Scraper API의 autoparse 기능을 사용하여 JSON 형식으로 데이터를 반환하기 때문에 해석이 매우 간단합니다.우리는 응답 사전에서 필요한 데이터를 선택하기만 하면 된다.
    우선, 우리는 전체 JSON 응답을 불러오고, 모든 결과를 교체해서 정보를 추출한 다음에 그것을 새로운 항목으로 조합할 것이다. 우리는 잠시 후에 사용할 수 있다.
    이 과정은 또 다른 페이지의 결과가 있는지 검사할 것이다.있으면 **yield scrapy를 호출합니다.**를 다시 요청하고 결과를 해석 함수로 보냅니다.또한pos는 우리가 긁어낸 페이지 수를 추적하는 데 사용됩니다.
    def parse(self, response):
           di = json.loads(response.text)
           pos = response.meta['pos']
           dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
           for result in di['organic_results']:
               title = result['title']
               snippet = result['snippet']
               link = result['link']
               item = {'title': title, 'snippet': snippet, 'link': link, 'position': pos, 'date': dt}
               pos += 1
               yield item
           next_page = di['pagination']['nextPageUrl']
           if next_page:
               yield scrapy.Request(get_url(next_page), callback=self.parse, meta={'pos': pos})
    

    그것들을 한데 모아 거미를 운행시키다


    이제 거미의 작업 원리와 절차에 대해 튼튼하게 이해하셔야 합니다.우리가 만든 거미, 구글.py에는 다음과 같은 내용이 있어야 합니다.
    import scrapy
    from urllib.parse import urlencode
    from urllib.parse import urlparse
    import json
    from datetime import datetime
    API_KEY = 'YOUR_KEY'
    
    def get_url(url):
       payload = {'api_key': API_KEY, 'url': url, 'autoparse': 'true', 'country_code': 'us'}
       proxy_url = 'http://api.scraperapi.com/?' + urlencode(payload)
       return proxy_url
    
    def create_google_url(query, site=''):
       google_dict = {'q': query, 'num': 100, }
       if site:
           web = urlparse(site).netloc
           google_dict['as_sitesearch'] = web
           return 'http://www.google.com/search?' + urlencode(google_dict)
       return 'http://www.google.com/search?' + urlencode(google_dict)
    
    class GoogleSpider(scrapy.Spider):
       name = 'google'
       allowed_domains = ['api.scraperapi.com']
       custom_settings = {'ROBOTSTXT_OBEY': False, 'LOG_LEVEL': 'INFO',
                      'CONCURRENT_REQUESTS_PER_DOMAIN': 10}
    
       def start_requests(self):
           queries = ['scrapy’, ‘beautifulsoup’] 
           for query in queries:
               url = create_google_url(query)
               yield scrapy.Request(get_url(url), callback=self.parse, meta={'pos': 0})
    
       def parse(self, response):
           di = json.loads(response.text)
           pos = response.meta['pos']
           dt = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
           for result in di['organic_results']:
               title = result['title']
               snippet = result['snippet']
               link = result['link']
               item = {'title': title, 'snippet': snippet, 'link': link, 'position': pos, 'date': dt}
               pos += 1
               yield item
           next_page = di['pagination']['nextPageUrl']
           if next_page:
               yield scrapy.Request(get_url(next_page), callback=self.parse, meta={'pos': pos})
    
    scraper를 테스트하기 전에, 10개의 병렬 라인을 가진 scraper와 API 계획이 없는 것을 통합할 수 있도록 설정을 설정해야 합니다.
    이를 위해, 우리는spider 클래스에서 다음과 같은 사용자 정의 설정을 정의했습니다.
    custom_settings = {'ROBOTSTXT_OBEY': False, 'LOG_LEVEL': 'INFO',
                           'CONCURRENT_REQUESTS_PER_DOMAIN': 10, 
                           'RETRY_TIMES': 5}
    
    Scraper API 자유 계획과 일치하도록 10개의 스레드를 병렬로 설정하고, 실패한 요청을 5번 다시 시도하도록 etRETRY_TIMES에 알려 줍니다.설정에 있습니다.pyfile DOWNLOAD_DELAYRANDOMIZE_DOWNLOAD_DELAY 이 활성화되지 않았는지 확인해야 합니다. 왜냐하면 병발성을 낮출 수 있고,scrapeapi가 필요로 하는 것이 아니기 때문입니다.
    기어오르기를 테스트하거나 실행하려면, 정확한 위치에 있는지 확인한 다음, 아래의 기어오르기 명령을 실행하면, 이 명령은 결과를 서버에 출력합니다.csv 파일:
    scrapy crawl google -o test.csv
    
    만약 모든 것이 계획대로 진행된다면 거미는 구글에서 당신이 제공한 모든 키워드를 검색할 것이다.에이전트를 사용하면 로봇 사용이 금지되는 것을 피할 수 있습니다.

    모니터링 설정


    스크레이퍼를 모니터링하기 위해 ScrapeOps를 사용합니다. 이것은 인터넷 스크레이퍼에 전문적으로 사용되는 무료 모니터링과 경보 도구입니다.
    ScrapeOps는 30초의 간단한 설치를 통해 네트워크 캡처에 필요한 모든 모니터링, 경고, 스케줄링 및 데이터 유효성 검사 기능을 제공합니다.
    현장 프레젠테이션: ScrapeOps Demo
    ScrapeOps를 사용하여 쉽게 설정할 수 있습니다.파이썬 패키지를 설치하기만 하면 됩니다.
    pip install scrapeops-scrapy
    
    settings.py 파일에 세 줄을 추가합니다.
    ## settings.py
    
    ## Add Your ScrapeOps API key
    SCRAPEOPS_API_KEY = 'YOUR_API_KEY'
    
    ## Add In The ScrapeOps Extension
    EXTENSIONS = {
     'scrapeops_scrapy.extension.ScrapeOpsMonitor': 500, 
    }
    
    ## Update The Download Middlewares
    DOWNLOADER_MIDDLEWARES = { 
    'scrapeops_scrapy.middleware.retry.RetryMiddleware': 550, 
    'scrapy.downloadermiddlewares.retry.RetryMiddleware': None, 
    }
    
    그곳에서 우리의 스크래치 통계 데이터는 자동으로 기록되어 우리의 계기판에 전송될 것이다.

    스파이더를 직접 실행하거나 특정 구글 프로젝트를 수정하고 싶다면 마음대로 하세요.The code is on GitHub here . 등록for a free account here을 통해 자신의 Scraper APIAPI_KEY를 획득해야 합니다.

    좋은 웹페이지 즐겨찾기