>  기사  >  백엔드 개발  >  Python 크롤러 에이전트 IP 풀 구현 방법

Python 크롤러 에이전트 IP 풀 구현 방법

高洛峰
高洛峰원래의
2017-02-11 13:09:462635검색

회사의 분산형 딥 웹 크롤러로 활동하면서 수천 개의 크롤러에 효과적인 프록시를 제공하기 위해 안정적인 프록시 풀 서비스를 구축했습니다. 이를 통해 각 크롤러가 해당 웹 사이트에 대해 유효한 프록시 IP를 얻도록 보장함으로써 크롤러가 빠르고 안정적으로 실행되므로 무료 리소스를 사용하여 간단한 프록시 풀 서비스를 구축하고 싶습니다.

회사의 분산형 딥 웹 크롤러로 활동하면서 수천 개의 크롤러에 효과적인 프록시를 제공하기 위해 안정적인 프록시 풀 서비스를 구축하여 각 크롤러가 해당 웹사이트에 대해 유효한 프록시 IP를 얻도록 했습니다. 이를 통해 크롤러의 빠르고 안정적인 작동을 보장합니다. 물론 회사에서 만든 것들은 오픈 소스로 제공할 수 없습니다. 하지만 여가 시간에 가려움을 느끼기 때문에 무료 리소스를 사용하여 간단한 프록시 풀 서비스를 구축하고 싶습니다.

1.질문

프록시 IP는 어디서 나오나요?
처음 혼자서 크롤링을 배웠을 때는 프록시 IP가 없어서 Xisha, Quick Proxy 등 무료 프록시가 있는 웹사이트를 방문하여 크롤링할 수 있는 프록시가 아직 남아 있습니다. 물론 더 나은 프록시 인터페이스가 있다면 직접 연결할 수도 있습니다. 무료 프록시 컬렉션도 매우 간단합니다. 페이지 방문 페이지 —> 일반/xpath 추출 —> 저장

프록시의 품질을 보장하는 방법은 무엇입니까?
대부분의 무료 프록시 IP를 사용할 수 없는 것은 확실합니다. 그렇지 않으면 왜 다른 사람들이 유료 IP를 제공합니까(그러나 많은 에이전트의 유료 IP는 안정적이지 않고 대부분을 사용할 수 없다는 것이 사실입니다). 따라서 수집된 프록시 IP를 직접 사용할 수는 없습니다. 이러한 프록시를 지속적으로 사용하도록 탐지 프로그램을 작성하여 안정적인 웹 사이트에 접속하여 정상적으로 사용할 수 있는지 확인할 수 있습니다. 프록시 감지는 느린 프로세스이므로 이 프로세스는 다중 스레드이거나 비동기식일 수 있습니다.

수집된 프록시는 어떻게 보관하나요?
여기에서는 Redis 프록시를 위한 여러 데이터 구조를 지원하는 고성능 NoSQL 데이터베이스 SSDB를 추천해야 합니다. 대기열, 해시, 집합, k-v 쌍 및 T 수준 데이터를 지원합니다. 분산 크롤러를 위한 매우 훌륭한 중간 저장 도구입니다.

크롤러가 이러한 프록시를 더 쉽게 사용할 수 있도록 하려면 어떻게 해야 합니까?
대답은 당연히 서비스로 만드는 것입니다. Python에는 웹 프레임워크가 너무 많습니다. 하나를 선택하고 크롤러가 호출할 API를 작성하세요. 예를 들어, 크롤러가 에이전트를 사용할 수 없음을 발견하면 API를 통해 에이전트 IP를 적극적으로 삭제할 수 있습니다. 에이전트 풀 IP가 충분하지 않음을 발견하면 에이전트 풀을 적극적으로 새로 고칠 수 있습니다. . 이는 탐지 프로그램보다 더 안정적입니다.

2. 프록시 풀 설계

프록시 풀은 네 부분으로 구성됩니다.

ProxyGetter:
프록시 획득 인터페이스는 현재 5개입니다. 무료 프록시 소스는 호출될 때마다 이 5개 웹사이트의 최신 프록시가 캡처되어 DB에 저장됩니다. 추가 프록시 획득 인터페이스를 직접 추가할 수 있습니다.

DB:
프록시 IP를 저장하는 것은 현재 SSDB만 지원합니다. SSDB를 선택하는 이유는 이 기사를 참조하세요. 저는 개인적으로 SSDB가 좋은 Redis 대안이라고 생각합니다. SSDB를 사용하지 않았다면 설치가 매우 간단합니다.

일정:
예약된 작업 사용자는 정기적으로 DB에서 에이전트 가용성을 확인하고 사용할 수 없는 에이전트를 삭제합니다. 동시에 ProxyGetter를 통해 최신 프록시를 가져와서 DB에 저장하는 작업도 수행합니다.

ProxyApi:
프록시 풀의 외부 인터페이스는 다음과 같습니다. 이제 상대적으로 간단해졌습니다. 저는 Flask를 살펴보는 데 2시간을 투자했습니다. 저는 Flask를 사용하여 결정을 내리게 되어 기뻤습니다. 이 기능은 크롤러가 직접 사용할 수 있도록 크롤러에 가져오기/삭제/새로 고침 및 기타 인터페이스를 제공하는 것입니다.

Python 크롤러 에이전트 IP 풀 구현 방법

[HTML_REMOVED] 디자인

3. 코드 모듈

동적 Python의 상위 수준 데이터 구조 유형과 동적 바인딩 덕분에 신속한 애플리케이션 개발에 매우 ​​적합하며 기존 소프트웨어 구성 요소를 연결하는 접착 언어로도 적합합니다. 이 프록시 IP 풀을 생성하기 위해 Python을 사용하는 것도 매우 간단합니다.

Api: api 인터페이스 관련 코드는 현재 Flask로 구현되어 있습니다. 단순한. 클라이언트 요청이 Flask로 전달되고 Flask는 get/delete/refresh/get_all

을 포함하여 ProxyManager의 구현을 호출합니다. DB: 현재 데이터베이스는 SSDB를 사용합니다. 코드는 향후 다른 유형의 데이터베이스 확장을 용이하게 하기 위해 팩토리 모드에서 구현됩니다.

관리자:

현재 프록시 풀은 프록시 관리만 담당합니다. . 향후에는 프록시 및 크롤러 바인딩, 에이전트 및 계정 바인딩 등 더 많은 기능이 있을 수 있습니다. get/delete/refresh/get_all

ProxyGetter: 현재 에이전트가 획득하는 관련 코드는 5개입니다. 66, 귀하 에이전트, Xixi 에이전트 및 guobanjia가 캡처되었습니다. 테스트 후 이 5개 웹사이트에는 매일 업데이트되는 사용 가능한 프록시가 60~70개만 있습니다. 물론 자체 프록시 인터페이스 확장도 지원합니다.

일정: 예약된 작업 관련 코드는 이제 예약된 새로 고침 코드만 구현하고 다중 프로세스 방법을 사용하여 사용 가능한 에이전트를 확인합니다.

Util: GetConfig: 구성 파일 config.ini를 읽는 클래스, ConfigParse: 대소문자를 구분하도록 ConfigParser의 통합 재작성 클래스, : 싱글톤을 구현합니다. Singleton: 클래스 속성의 지연 계산을 구현합니다. LazyProperty

기타 파일: 구성 파일: Config.ini, 데이터베이스 구성 및 프록시 획득 인터페이스 구성. GetFreeProxy에서 새 프록시 획득 방법을 추가하고 이를 Config.ini에 등록하여 사용할 수 있습니다.

4. 설치

코드 다운로드:

git clone git@github.com:jhao104/proxy_pool.git

或者直接到https://github.com/jhao104/proxy_pool 下载zip文件

종속성 설치:

pip install -r requirements.txt

시작:

需要分别启动定时任务和api
到Config.ini中配置你的SSDB

到Schedule目录下:
>>>python ProxyRefreshSchedule.py

到Api目录下:
>>>python ProxyApi.py

5. 예약된 작업이 시작되면 모든 에이전트는 에이전트 획득 방법을 통해 데이터베이스로 가져와서 확인됩니다. 이후에는 기본적으로 20분마다 반복됩니다. 예약된 작업이 시작된 후 약 1~2분 후에 SSDB에서 새로 고쳐진 사용 가능한 프록시를 볼 수 있습니다.

ProxyApi.py를 시작한 후 브라우저에서 사용할 수 있습니다. 인터페이스가 프록시를 가져오면 다음은 브라우저의 스크린샷입니다.

색인 페이지:

Python 크롤러 에이전트 IP 풀 구현 방법


페이지 가져오기:


Python 크롤러 에이전트 IP 풀 구현 방법

get_all 페이지:


Python 크롤러 에이전트 IP 풀 구현 방법

크롤러에서 사용하려면 이 API를 함수를 직접 사용합니다. 예:


Python 크롤러 에이전트 IP 풀 구현 방법

import requests

def get_proxy():
  return requests.get("http://127.0.0.1:5000/get/").content

def delete_proxy(proxy):
  requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy))

# your spider code

def spider():
  # ....
  requests.get('https://www.example.com', proxies={"http": "http://{}".format(get_proxy)})
  # ....

6. 마지막으로

시간이 부족하여 함수와 코드가 상대적으로 초보적입니다. , 앞으로 시간이 있으면 개선하겠습니다. 마음에 드셨다면 github에 별표를 남겨주세요. 고마워하는!

Python 크롤러 에이전트 IP 풀 구현 방법과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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