크롤러를 빨리 배우고 싶다면 가장 배울 가치가 있는 언어는 Python이어야 합니다. Python에는 빠른 웹 개발, 크롤러, 자동화된 운영 및 유지 관리 등과 같은 많은 응용 프로그램 시나리오가 있습니다. 자동으로 스크립트를 게시하고, 스크립트, 간단한 인증 코드 인식 스크립트를 보내고 받습니다.
크롤러도 개발 과정에서 많은 재사용 과정을 거치게 됩니다. 오늘은 앞으로 시간과 노력을 절약하고 작업을 효율적으로 완료할 수 있는 8가지 필수 기술을 요약하겠습니다.
get 메소드
import urllib2 url = "http://www.baidu.com" response = urllib2.urlopen(url) print response.read()
post 메소드
import urllib import urllib2 url = "http://abcde.com" form = {'name':'abc','password':'1234'} form_data = urllib.urlencode(form) request = urllib2.Request(url,form_data) response = urllib2.urlopen(request) print response.read()
크롤러를 개발하는 과정에서 IP가 차단되는 상황이 자주 발생하므로, 프록시 IP를 사용하세요. urllib2 패키지에 ProxyHandler 클래스가 있습니다. 다음 코드 조각에 표시된 대로 이 클래스를 통해 웹 페이지에 액세스하기 위한 프록시를 설정할 수 있습니다.
import urllib2 proxy = urllib2.ProxyHandler({'http': '127.0.0.1:8087'}) opener = urllib2.build_opener(proxy) urllib2.install_opener(opener) response = urllib2.urlopen('http://www.baidu.com') print response.read()
코드 조각:
import urllib2, cookielib cookie_support= urllib2.HTTPCookieProcessor(cookielib.CookieJar()) opener = urllib2.build_opener(cookie_support) urllib2.install_opener(opener) content = urllib2.urlopen('http://XXXX').read()
키는 HTTP 쿠키 값을 관리하고, HTTP 요청에 의해 생성된 쿠키를 저장하고, 나가는 HTTP 요청에 쿠키 개체를 추가하는 데 사용되는 CookieJar()입니다. 전체 쿠키는 메모리에 저장되며 CookieJar 인스턴스의 가비지 수집 후에는 쿠키가 손실됩니다. 모든 프로세스가 별도로 작동할 필요가 없습니다.
수동으로 쿠키 추가:
cookie = "PHPSESSID=91rurfqm2329bopnosfu4fvmu7; kmsign=55d2c12c9b1e3; KMUID=b6Ejc1XSwPq9o756AxnBAg=" request.add_header("Cookie", cookie)
4. 브라우저로 위장
서버는 다음 헤더를 확인합니다.
import urllib2 headers = { 'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6' } request = urllib2.Request( url = 'http://my.oschina.net/jhao104/blog?catalog=3463517', headers = headers ) print urllib2.urlopen(request).read()
6. 인증코드 처리
어떻게 트랜스코딩해도 왜곡되는 웹페이지를 본 적이 있나요? 하하, 그 말은 많은 웹 서비스가 압축된 데이터를 전송하는 기능을 가지고 있다는 것을 모르신다는 뜻입니다. 이를 통해 네트워크 회선에서 전송되는 대량의 데이터를 60% 이상 줄일 수 있습니다. XML 데이터는 매우 높은 수준으로 압축될 수 있으므로 XML 웹 서비스의 경우 특히 그렇습니다.
import urllib2, httplib request = urllib2.Request('http://xxxx.com') request.add_header('Accept-encoding', 'gzip') opener = urllib2.build_opener() f = opener.open(request)
이것이 핵심입니다. 요청 객체를 생성하고 Accept-encoding 헤더를 추가하여 gzip 압축 데이터를 허용할 수 있음을 서버에 알리는 것입니다.
그런 다음 데이터 압축을 풉니다.
import StringIO import gzip compresseddata = f.read() compressedstream = StringIO.StringIO(compresseddata) gzipper = gzip.GzipFile(fileobj=compressedstream) print gzipper.read()8. 다중 스레드 동시 크롤링 단일 스레드가 너무 느리면 다중 스레드가 필요합니다. 다음은 간단한 스레드 풀 템플릿입니다. 병행하고 있음을 알 수 있다.
from threading import Thread from Queue import Queue from time import sleep # q是任务队列 #NUM是并发线程总数 #JOBS是有多少任务 q = Queue() NUM = 2 JOBS = 10 #具体的处理函数,负责处理单个任务 def do_somthing_using(arguments): print arguments #这个是工作进程,负责不断从队列取数据并处理 def working(): while True: arguments = q.get() do_somthing_using(arguments) sleep(1) q.task_done() #fork NUM个线程等待队列 for i in range(NUM): t = Thread(target=working) t.setDaemon(True) t.start() #把JOBS排入队列 for i in range(JOBS): q.put(i) #等待所有JOBS完成 q.join()
위 내용은 양심 추천! Python 크롤러 마스터를 위한 8가지 필수 기술!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!