처음 두 기사에서는 제가 Mobike의 인터페이스를 선택한 이유를 분석했고, 그 결과 분석해 보면, 이 글은 학습을 위한 실행 가능한 소스 코드를 직접 제공합니다.
이 크롤러는 학습 및 연구 목적으로만 사용되므로 법적 분쟁이 발생할 수 있습니다. 그 이후의 책임은 본인에게 있습니다.별표 꼭 남겨주세요. 즐겨보세요! >디렉토리 구조rree
글을 읽을 용기가 없다면 직접 해주세요:
influx-importer - 가져오기 influxdb에 들어갔는데 예전에는 잘 못했는데
importToDb.py - 분석을 위해 Postgres 데이터베이스로 가져오기
sql.sql - 테이블 sql 생성
start.sh - 지속적으로 실행되는 스크립트
아이디어
Mobike의 API는 자전거를 사각형 영역으로 이동하는 것만으로도 넓은 영역 전체의 데이터를 캡처할 수 있습니다. 지역별
왼쪽,상단,
오른쪽,하단은 현재 청두 도시 순환 고속도로 내에 있는 크롤링 범위를 정의합니다. Nanhu의 사각형 영역까지. $서버. rree 그럼 250개의 쓰레드가 시작됐네요. 왜 코루틴을 안썼냐고 물어보시던데 흥~~그땐 배우지 않았네요~~사실 그럴수도 있겠네요. 크롤링 후 데이터 중복을 제거해야 하므로 작은 사각형 영역 사이의 중복된 부분을 제거하기 위해 최종 group_data가 이를 정확하게 수행합니다. git clone https://github.com/derekhe/mobike-crawler
python3 crawler.py
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개의 프록시를 무작위로 선택합니다. 내 프록시 풀은 매시간 업데이트되지만 코드에 제공된
jsonBLOB의 프록시 목록은 단지 샘플일 뿐이며 일정 기간이 지나면 대부분 유효하지 않게 됩니다. 시간. .
여기에서는 대리 채점 메커니즘이 사용됩니다. 에이전트를 무작위로 직접 선택하는 대신 점수에 따라 에이전트를 정렬했습니다. 요청이 성공할 때마다 포인트가 추가되고, 요청이 잘못되면 포인트가 차감됩니다. 이를 통해 빠른 시간 안에 가장 좋은 속도와 품질을 갖춘 에이전트를 선택할 수 있습니다. 저장해 두었다가 필요하면 다음에 사용할 수 있습니다. 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()
위 내용은 Mobike 크롤러 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!