>  기사  >  백엔드 개발  >  Mobike 크롤러 소스 코드 분석

Mobike 크롤러 소스 코드 분석

PHPz
PHPz원래의
2017-04-04 10:40:342440검색

처음 두 기사에서는 제가 Mobike의 인터페이스를 선택한 이유를 분석했고, 그 결과 분석해 보면, 이 글은 학습을 위한 실행 가능한 소스 코드를 직접 제공합니다.

이 크롤러는 학습 및 연구 목적으로만 사용되므로 법적 분쟁이 발생할 수 있습니다. 그 이후의 책임은 본인에게 있습니다.


글을 읽을 용기가 없다면 직접 해주세요:

rree
별표 꼭 남겨주세요. 즐겨보세요! >

디렉토리 구조

분석 - 데이터 분석을 위한 jupyter

  • influx-importer - 가져오기 influxdb에 들어갔는데 예전에는 잘 못했는데

  • module
  • s - Proxy module
  • web - real -time 그래픽 디스플레이 모듈, 그 당시

    반응
  • 을 배우려면 여기에서 효과를 확인하세요
  • crawler.py - 크롤러 핵심 코드

  • importToDb.py - 분석을 위해 Postgres 데이터베이스로 가져오기

  • sql.sql - 테이블 sql 생성

  • start.sh - 지속적으로 실행되는 스크립트

  • 아이디어

  • 핵심 코드는crawler.py에 배치되고, 데이터는 먼저
sqlite

3 데이터베이스에 저장되며, 그런 다음 중복 제거 후 csv 파일로 내보냅니다.

Mobike의 API는 자전거를 사각형 영역으로 이동하는 것만으로도 넓은 영역 전체의 데이터를 캡처할 수 있습니다. 지역별

왼쪽,상단,

오른쪽

,하단은 현재 청두 도시 순환 고속도로 내에 있는 크롤링 범위를 정의합니다. ​​​​Nanhu의 사각형 영역까지. $서버. rree 그럼 250개의 쓰레드가 시작됐네요. 왜 코루틴을 안썼냐고 물어보시던데 흥~~그땐 배우지 않았네요~~사실 그럴수도 있겠네요. 크롤링 후 데이터 중복을 제거해야 하므로 작은 사각형 영역 사이의 중복된 부분을 제거하기 위해 최종 group_data가 이를 정확하게 수행합니다.

git clone https://github.com/derekhe/mobike-crawler
python3 crawler.py
핵심 API 코드는 여기에 있습니다. . 미니 프로그램의 API 인터페이스는 변수 몇 개만 생성하면 매우 간단합니다.

    def start(self):
        left = 30.7828453209
        top = 103.9213455517
        right = 30.4781772402
        bottom = 104.2178123382

        offset = 0.002

        if os.path.isfile(self.db_name):
            os.remove(self.db_name)

        try:
            with sqlite3.connect(self.db_name) as c:
                c.execute('''CREATE TABLE mobike
                    (Time DATETIME, bikeIds VARCHAR(12), bikeType TINYINT,distId INTEGER,distNum TINYINT, type TINYINT, x DOUBLE, y DOUBLE)''')
        except Exception as ex:
            pass

마지막으로 자주 탈취되는 IP 주소는 차단되지 않는지 여쭤봐도 될까요? 실제로 Mobike에는 IP 액세스 속도 제한이 있지만 이를 크랙하는 방법은 매우 간단합니다. 즉, 다수의 프록시를 사용하는 것입니다.

매일 기본적으로 8,000명 이상의 상담원이 참여하는 상담원 풀이 있습니다. ProxyProvider에서 직접 이 프록시 풀을 가져오고 선택

기능

을 제공하여 상위 50개의 프록시를 무작위로 선택합니다. 내 프록시 풀은 매시간 업데이트되지만 코드에 제공된

json

BLOB의 프록시 목록은 단지 샘플일 뿐이며 일정 기간이 지나면 대부분 유효하지 않게 됩니다. 시간. .

여기에서는 대리 채점 메커니즘이 사용됩니다. 에이전트를 무작위로 직접 선택하는 대신 점수에 따라 에이전트를 정렬했습니다. 요청이 성공할 때마다 포인트가 추가되고, 요청이 잘못되면 포인트가 차감됩니다. 이를 통해 빠른 시간 안에 가장 좋은 속도와 품질을 갖춘 에이전트를 선택할 수 있습니다. 저장해 두었다가 필요하면 다음에 사용할 수 있습니다.

        executor = ThreadPoolExecutor(max_workers=250)
        print("Start")
        self.total = 0
        lat_range = np.arange(left, right, -offset)
        for lat in lat_range:
            lon_range = np.arange(top, bottom, offset)
            for lon in lon_range:
                self.total += 1
                executor.submit(self.get_nearby_bikes, (lat, lon))

        executor.shutdown()
        self.group_data()
실제 사용시에는 ProxyProvider.pick()을 통해 Proxy를 선택한 후 사용하시면 됩니다. 프록시에 문제가 있는 경우 나중에 이 프록시가 선택되지 않도록 직접 proxy.fatal_error()를 사용하여 점수를 낮추십시오. 으으으으으그래 기본은 그거야~~~다른 코드는 스스로 공부해봐~~~

위 내용은 Mobike 크롤러 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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