Python 분산 크롤러 원리에 대한 심층적인 이해
python 동영상 튜토리얼 칼럼에서는 분산 크롤러의 원리를 소개합니다.
무료 추천: python 비디오 튜토리얼
먼저, 정상적인 인간 행동이라면 웹 콘텐츠를 얻는 방법을 살펴보겠습니다.
(1) 브라우저를 열고 URL을 입력한 후 원본 웹페이지를 엽니다.
(2) 제목, 저자, 초록, 텍스트 및 기타 정보를 포함하여 원하는 콘텐츠를 선택합니다.
(3) 저장합니다. in the hard disk
기술 수준에 매핑된 위의 세 가지 프로세스는 실제로 네트워크 요청, 구조화된 데이터 캡처 및 데이터 저장입니다.
위의 간단한 잡기 기능을 구현하기 위해 Python을 사용하여 간단한 프로그램을 작성합니다.
#!/usr/bin/python #-*- coding: utf-8 -*- ''''' Created on 2014-03-16 @author: Kris ''' import urllib2, re, cookielib def httpCrawler(url): ''''' @summary: 网页抓取 ''' content = httpRequest(url) title = parseHtml(content) saveData(title) def httpRequest(url): ''''' @summary: 网络请求 ''' try: ret = None SockFile = None request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') request.add_header('Pragma', 'no-cache') opener = urllib2.build_opener() SockFile = opener.open(request) ret = SockFile.read() finally: if SockFile: SockFile.close() return ret def parseHtml(html): ''''' @summary: 抓取结构化数据 ''' content = None pattern = '<title>([^<]*?)</title>' temp = re.findall(pattern, html) if temp: content = temp[0] return content def saveData(data): ''''' @summary: 数据存储 ''' f = open('test', 'wb') f.write(data) f.close() if __name__ == '__main__': url = 'http://www.baidu.com' httpCrawler(url)
매우 간단해 보입니다. 예, 크롤러를 시작하기 위한 기본 프로그램입니다. 물론 수집 프로세스를 구현하는 것은 위의 기본 단계에 지나지 않습니다. 그러나 강력한 수집 프로세스를 구현하려면 다음과 같은 문제에 직면하게 됩니다.
(1) 쿠키 정보로 액세스해야 합니다. 예를 들어 대부분의 소셜 소프트웨어는 기본적으로 사용자가 정보를 보려면 로그인해야 합니다. 값은 실제로 매우 간단합니다. Python에서 제공하는 cookielib 모듈을 사용하면 로그인을 성공적으로 시뮬레이션하고 크롤러가 로그인 상태에 있는 한 이러한 방식으로 소스 웹사이트에서 제공한 쿠키 정보로 모든 방문을 달성할 수 있습니다. 로그인한 사용자가 보는 모든 정보가 수집되었습니다. 다음은 쿠키를 사용하는 httpRequest() 메서드에 대한 수정 사항입니다.
ckjar = cookielib.MozillaCookieJar() cookies = urllib2.HTTPCookieProcessor(ckjar) #定义cookies对象 def httpRequest(url): ''''' @summary: 网络请求 ''' try: ret = None SockFile = None request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)') request.add_header('Pragma', 'no-cache') opener = urllib2.build_opener(cookies) #传递cookies对象 SockFile = opener.open(request) ret = SockFile.read() finally: if SockFile: SockFile.close() return ret
(2) 인코딩 문제. 현재 웹사이트에는 utf-8 또는 gbk라는 두 가지 가장 일반적인 코드가 있습니다. 소스 웹사이트 코드를 수집했는데 데이터베이스에 저장된 코드가 일치하지 않는 경우(예: 163.com의 코드는 gbk를 사용합니다.) 저장소가 utf.-8로 인코딩된 데이터인 경우 Python에서 제공되는 encode() 및 decode() 메서드를 사용하여 변환할 수 있습니다. 예:
content = content.decode('gbk', 'ignore') #将gbk编码转为unicode编码 content = content.encode('utf-8', 'ignore') #将unicode编码转为utf-8编码
유니코드 인코딩이 중간에 표시되므로 먼저 중간 인코딩 유니코드로 변환해야 합니다. gbk 또는 utf-8 변환으로 변환할 수 있습니다.
(3) 웹 페이지의 태그가 불완전합니다. 예를 들어 일부 소스 코드에는 시작 태그가 있지만 종료 태그가 없으면 구조화된 데이터를 캡처하는 기능에 영향을 미칩니다. BeautifulSoup 모듈은 먼저 소스 코드를 정리한 다음 콘텐츠를 분석하고 가져옵니다.
(4) 일부 웹사이트는 JS를 사용하여 웹 콘텐츠를 저장합니다. 소스코드를 직접 살펴보니, 귀찮은 JS 코드가 잔뜩 발견되었습니다. 브라우저를 구문 분석하여 js와 ajax를 구문 분석할 수 있는 mozilla, webkit 및 기타 툴킷을 사용할 수 있지만 속도는 약간 느려집니다.
(5) 사진은 플래시 형식으로 존재합니다. 사진의 내용이 텍스트나 숫자로 구성되어 있으면 처리하기가 더 쉽습니다. 자동 인식을 위해서는 OCR 기술만 사용하면 됩니다. 그러나 플래시 링크인 경우에는 전체 URL을 저장합니다.
(6) 웹페이지에는 여러 웹페이지 구조가 있습니다. 크롤링 규칙 세트가 하나만 있으면 작동하지 않습니다. 따라서 크롤링을 지원하려면 여러 시뮬레이션 세트를 구성해야 합니다.
(7) 소스 웹사이트를 모니터링합니다. 결국, 다른 사람의 것을 크롤링하는 것은 좋은 일이 아니므로 대부분의 웹사이트에는 크롤러에 대한 액세스를 금지하는 제한 사항이 있습니다.
좋은 수집 시스템은 대상 데이터가 어디에 있든 사용자에게 표시되는 한 다시 수집할 수 있어야 합니다. 보이는 그대로 얻는 것이 방해받지 않는 수집, 로그인이 필요한 데이터인지 여부에 관계없이 원활하게 수집할 수 있습니다. 소셜 네트워킹 사이트와 같은 대부분의 귀중한 정보는 일반적으로 로그인이 필요합니다. 로그인에 대처하려면 웹 사이트에는 데이터를 정상적으로 얻기 위해 사용자 로그인을 시뮬레이션하는 크롤러 시스템이 있어야 합니다. 그러나 소셜 웹사이트는 폐쇄 루프를 형성하기를 원하며 이러한 종류의 시스템은 뉴스 및 기타 콘텐츠만큼 사람들에게 공개되지 않습니다. 이러한 소셜 웹사이트의 대부분은 로봇 크롤러 시스템이 데이터를 크롤링하는 것을 방지하기 위해 몇 가지 제한 사항을 채택합니다. 일반적으로 계정이 감지되어 액세스가 금지되기 전까지 크롤링하는 데 오랜 시간이 걸리지 않습니다. 이는 우리가 이러한 웹사이트에서 데이터를 크롤링할 수 없다는 뜻인가요? 이는 확실히 사실이 아닙니다. 소셜 웹사이트가 웹페이지 액세스를 차단하지 않는 한, 우리는 일반 사람들이 액세스할 수 있는 데이터에도 액세스할 수 있습니다. 최종 분석에서는 전문적으로 "감시 방지"라고 불리는 정상적인 인간 행동의 시뮬레이션입니다.
원본 웹사이트에는 일반적으로 다음과 같은 제한이 있습니다.
1. 일정 기간 동안 단일 IP에 대한 방문 횟수는 재미를 위한 목적이 아닌 이상 일반 사용자가 해당 웹사이트에 접속하면 통과되지 않습니다. 특정 기간 내에 웹 사이트를 빠르게 방문하면 오래 가지 않습니다. 이 문제는 해결하기 쉽습니다. 다수의 불규칙한 프록시 IP를 사용하여 프록시 풀을 형성하고, 프록시 풀에서 프록시를 무작위로 선택하고, 액세스를 시뮬레이션할 수 있습니다. 프록시 IP에는 투명 프록시와 익명 프록시의 두 가지 유형이 있습니다.
2. 일정 기간 동안 단일 계정에 대한 방문 횟수. 사람이 24시간 데이터 인터페이스에 액세스하고 속도가 매우 빠르면 로봇일 수 있습니다. 정상적인 동작으로 많은 수의 계정을 사용할 수 있습니다. 정상적인 동작은 일반 사람들이 소셜 네트워킹 사이트에서 작동하는 방식이며, 각 방문 사이에 방문하는 URL 수를 최소화해야 합니다. 간격은 임의의 값일 수 있습니다. 즉, URL을 방문할 때마다 임의의 시간 동안 대기한 후 다음 URL을 방문합니다.
계정과 IP의 접근 정책을 통제할 수 있다면 기본적으로 문제가 없습니다. 물론 상대방의 웹사이트에도 조정될 운영 및 유지 전략이 있을 것입니다. 적과 우리 사이의 전투에서 크롤러는 상대방의 모니터링 방지가 우리에게 영향을 미칠 것임을 감지할 수 있어야 합니다. 적시에 처리하도록 관리자에게 알리십시오. 실제로 가장 이상적인 것은 머신러닝을 통해 감시 방지 대결을 지능적으로 구현하고 중단 없는 캡처를 달성할 수 있는 것입니다.
다음은 그림 1과 같이 제가 최근 디자인하고 있는 분산 크롤러 아키텍처 다이어그램입니다.
이것은 순전히 예비 아이디어를 구현하는 작업입니다. 주로 Python의 Socket 모듈을 사용하여 서버와 클라이언트 간의 통신을 구현하는 데 사용됩니다. 관심이 있으시면 저에게 개별적으로 연락하여 더 나은 솔루션에 대해 논의하고 완료할 수 있습니다.
위 내용은 Python 분산 크롤러 원리에 대한 심층적인 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











HADIDB : 가볍고 높은 수준의 확장 가능한 Python 데이터베이스 HadIDB (HADIDB)는 파이썬으로 작성된 경량 데이터베이스이며 확장 수준이 높습니다. PIP 설치를 사용하여 HADIDB 설치 : PIPINSTALLHADIDB 사용자 관리 사용자 만들기 사용자 : createUser () 메소드를 작성하여 새 사용자를 만듭니다. Authentication () 메소드는 사용자의 신원을 인증합니다. Fromhadidb.operationimportuseruser_obj = user ( "admin", "admin") user_obj.

Python은 웹 개발, 데이터 과학, 기계 학습, 자동화 및 스크립팅 분야에서 널리 사용됩니다. 1) 웹 개발에서 Django 및 Flask 프레임 워크는 개발 프로세스를 단순화합니다. 2) 데이터 과학 및 기계 학습 분야에서 Numpy, Pandas, Scikit-Learn 및 Tensorflow 라이브러리는 강력한 지원을 제공합니다. 3) 자동화 및 스크립팅 측면에서 Python은 자동화 된 테스트 및 시스템 관리와 같은 작업에 적합합니다.

2 시간 이내에 Python의 기본 프로그래밍 개념과 기술을 배울 수 있습니다. 1. 변수 및 데이터 유형을 배우기, 2. 마스터 제어 흐름 (조건부 명세서 및 루프), 3. 기능의 정의 및 사용을 이해하십시오. 4. 간단한 예제 및 코드 스 니펫을 통해 Python 프로그래밍을 신속하게 시작하십시오.

해시 값으로 저장되기 때문에 MongoDB 비밀번호를 Navicat을 통해 직접 보는 것은 불가능합니다. 분실 된 비밀번호 검색 방법 : 1. 비밀번호 재설정; 2. 구성 파일 확인 (해시 값이 포함될 수 있음); 3. 코드를 점검하십시오 (암호 하드 코드 메일).

데이터 전문가는 다양한 소스에서 많은 양의 데이터를 처리해야합니다. 이것은 데이터 관리 및 분석에 어려움을 겪을 수 있습니다. 다행히도 AWS Glue와 Amazon Athena의 두 가지 AWS 서비스가 도움이 될 수 있습니다.

MySQL 데이터베이스 성능 최적화 안내서 리소스 집약적 응용 프로그램에서 MySQL 데이터베이스는 중요한 역할을 수행하며 대규모 트랜잭션 관리를 담당합니다. 그러나 응용 프로그램 규모가 확장됨에 따라 데이터베이스 성능 병목 현상은 종종 제약이됩니다. 이 기사는 일련의 효과적인 MySQL 성능 최적화 전략을 탐색하여 응용 프로그램이 고 부하에서 효율적이고 반응이 유지되도록합니다. 실제 사례를 결합하여 인덱싱, 쿼리 최적화, 데이터베이스 설계 및 캐싱과 같은 심층적 인 주요 기술을 설명합니다. 1. 데이터베이스 아키텍처 설계 및 최적화 된 데이터베이스 아키텍처는 MySQL 성능 최적화의 초석입니다. 몇 가지 핵심 원칙은 다음과 같습니다. 올바른 데이터 유형을 선택하고 요구 사항을 충족하는 가장 작은 데이터 유형을 선택하면 저장 공간을 절약 할 수있을뿐만 아니라 데이터 처리 속도를 향상시킬 수 있습니다.

Redis 서버를 시작하는 단계에는 다음이 포함됩니다. 운영 체제에 따라 Redis 설치. Redis-Server (Linux/MacOS) 또는 Redis-Server.exe (Windows)를 통해 Redis 서비스를 시작하십시오. Redis-Cli Ping (Linux/MacOS) 또는 Redis-Cli.exe Ping (Windows) 명령을 사용하여 서비스 상태를 확인하십시오. Redis-Cli, Python 또는 Node.js와 같은 Redis 클라이언트를 사용하여 서버에 액세스하십시오.

Redis의 대기열을 읽으려면 대기열 이름을 얻고 LPOP 명령을 사용하여 요소를 읽고 빈 큐를 처리해야합니다. 특정 단계는 다음과 같습니다. 대기열 이름 가져 오기 : "큐 :"와 같은 "대기열 : my-queue"의 접두사로 이름을 지정하십시오. LPOP 명령을 사용하십시오. 빈 대기열 처리 : 대기열이 비어 있으면 LPOP이 NIL을 반환하고 요소를 읽기 전에 대기열이 존재하는지 확인할 수 있습니다.
