찾다
백엔드 개발파이썬 튜토리얼Mobike 크롤러 소스 코드 분석

Mobike 크롤러 소스 코드 분석

Apr 04, 2017 am 10:40 AM
모바이크

처음 두 기사에서는 제가 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으로 문의하세요.
Python의 병합 목록 : 올바른 메소드 선택Python의 병합 목록 : 올바른 메소드 선택May 14, 2025 am 12:11 AM

Tomergelistsinpython, youcanusethe operator, extendmethod, listcomprehension, oritertools.chain, 각각은 각각의 지위를 불러 일으킨다

Python 3에서 두 목록을 연결하는 방법은 무엇입니까?Python 3에서 두 목록을 연결하는 방법은 무엇입니까?May 14, 2025 am 12:09 AM

Python 3에서는 다양한 방법을 통해 두 개의 목록을 연결할 수 있습니다. 1) 작은 목록에 적합하지만 큰 목록에는 비효율적입니다. 2) 메모리 효율이 높지만 원래 목록을 수정하는 큰 목록에 적합한 확장 방법을 사용합니다. 3) 원래 목록을 수정하지 않고 여러 목록을 병합하는 데 적합한 * 운영자 사용; 4) 메모리 효율이 높은 대형 데이터 세트에 적합한 itertools.chain을 사용하십시오.

Python은 문자열을 연결합니다Python은 문자열을 연결합니다May 14, 2025 am 12:08 AM

join () 메소드를 사용하는 것은 Python의 목록에서 문자열을 연결하는 가장 효율적인 방법입니다. 1) join () 메소드를 사용하여 효율적이고 읽기 쉽습니다. 2)주기는 큰 목록에 비효율적으로 운영자를 사용합니다. 3) List Comprehension과 Join ()의 조합은 변환이 필요한 시나리오에 적합합니다. 4) READE () 방법은 다른 유형의 감소에 적합하지만 문자열 연결에 비효율적입니다. 완전한 문장은 끝납니다.

파이썬 실행, 그게 뭐야?파이썬 실행, 그게 뭐야?May 14, 2025 am 12:06 AM

pythonexecutionissprocessoftransformingpythoncodeintoExecutableInstructions.1) the -interreadsTheCode, ConvertingItintoByTecode, thethepythonVirtualMachine (pvm)을 실행합니다

파이썬 : 주요 기능은 무엇입니까?파이썬 : 주요 기능은 무엇입니까?May 14, 2025 am 12:02 AM

Python의 주요 특징은 다음과 같습니다. 1. 구문은 간결하고 이해하기 쉽고 초보자에게 적합합니다. 2. 개발 속도 향상, 동적 유형 시스템; 3. 여러 작업을 지원하는 풍부한 표준 라이브러리; 4. 광범위한 지원을 제공하는 강력한 지역 사회와 생태계; 5. 스크립팅 및 빠른 프로토 타이핑에 적합한 해석; 6. 다양한 프로그래밍 스타일에 적합한 다중-파라 디그 지원.

파이썬 : 컴파일러 또는 통역사?파이썬 : 컴파일러 또는 통역사?May 13, 2025 am 12:10 AM

Python은 해석 된 언어이지만 편집 프로세스도 포함됩니다. 1) 파이썬 코드는 먼저 바이트 코드로 컴파일됩니다. 2) 바이트 코드는 Python Virtual Machine에 의해 해석되고 실행됩니다. 3)이 하이브리드 메커니즘은 파이썬이 유연하고 효율적이지만 완전히 편집 된 언어만큼 빠르지는 않습니다.

루프 대 루프를위한 파이썬 : 루프시기는 언제 사용해야합니까?루프 대 루프를위한 파이썬 : 루프시기는 언제 사용해야합니까?May 13, 2025 am 12:07 AM

USEAFORLOOPHENTERATINGOVERASERASERASPECIFICNUMBEROFTIMES; USEAWHILLOOPWHENTINUTIMONDITINISMET.FORLOOPSAREIDEALFORKNOWNSEDINGENCENCENS, WHILEWHILELOOPSSUITSITUATIONS WITHERMINGEDERITERATIONS.

파이썬 루프 : 가장 일반적인 오류파이썬 루프 : 가장 일반적인 오류May 13, 2025 am 12:07 AM

Pythonloopscanleadtoerrors likeinfiniteloops, modifyinglistsdizeration, off-by-by-byerrors, zero-indexingissues, andnestedloopineficiencies.toavoidthese : 1) aing'i

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경