쿠키란 일부 웹사이트에서 사용자의 신원을 식별하고 세션 추적을 수행하기 위해 사용자의 로컬 단말기에 저장하는(보통 암호화된) 데이터를 말합니다.
예를 들어 일부 웹사이트에서는 원하는 정보를 얻으려면 로그인이 필요합니다. 로그인하지 않으면 게스트 모드로만 들어갈 수 있습니다. 그런 다음 Urllib2 라이브러리를 사용하여 이전에 로그인한 쿠키를 저장할 수 있습니다. 그런 다음 쿠키를 입력하여 원하는 페이지를 가져온 다음 크롤링합니다. 쿠키를 이해하는 것은 주로 로그인을 빠르게 시뮬레이션하고 대상 웹 페이지를 크롤링할 수 있도록 준비하는 것입니다.
이전 게시물에서는 urlopen() 함수를 사용하여 크롤링용 웹페이지를 열었습니다. 이는 단순한 Python 웹페이지 오프너이며 해당 매개변수는 urlopen(url, data, timeout)뿐입니다. 매개변수는 대상 웹페이지의 쿠키를 얻기에는 충분하지 않습니다. 이번에는 또 다른 Opener-CookieJar를 사용하겠습니다.
Cookielib는 Python 크롤러를 위한 중요한 모듈이기도 합니다. urllib2와 결합하여 원하는 콘텐츠를 크롤링할 수 있습니다. 이 모듈의 CookieJar 클래스 개체는 쿠키를 캡처하고 후속 연결 요청 시 이를 다시 보낼 수 있으므로 필요한 시뮬레이션된 로그인 기능을 달성할 수 있습니다.
여기서 특별한 참고 사항은 cookielib가 py2.7에 내장된 모듈이라는 것입니다. 내장 모듈을 보려면 다음에서 Lib 폴더를 볼 수 있습니다. 설치된 모든 모듈이 포함된 Python 디렉터리. 처음에는 생각도 못했는데 pycharm에서 cookielib를 찾을 수 없었습니다. 빠른 설치를 사용했는데 오류가 발생했습니다. 'Cookielib'에 대한 색인 페이지를 찾을 수 없습니다(철자가 틀린가요?)
그러다가 lib 폴더에 가서 거기에 있는지 볼 줄은 몰랐습니다 ~~
모듈을 소개하자면, 이 모듈의 주요 객체는 CookieJar, FileCookieJar, MozillaCookieJar, LWPCookieJar입니다.
관계: CookieJar —-Derived—->FileCookieJar —-Derived—–>MozillaCookieJar와 LWPCookieJar의 주요 사용법에 대해서는 아래에서 설명하겠습니다. urllib2.urlopen() 함수는 인증, 쿠키 또는 기타 고급 HTTP 기능을 지원하지 않습니다. 이러한 기능을 지원하려면 build_opener()(Python 프로그램이 브라우저 액세스를 시뮬레이션하도록 하는 데 사용할 수 있음, function~) 함수를 사용하여 사용자 정의 Opener 객체를 생성해야 합니다.
1. 먼저 웹사이트의 쿠키를 구해봅시다
예시:
#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.CookieJar() #声明一个CookieJar的类对象保存cookie(注意CookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in my.cookie: print"name="+item.name print"value="+item.value
결과:
name=BAIDUID value=73BD718962A6EA0DAD4CB9578A08FDD0:FG=1 name=BIDUPSID value=73BD718962A6EA0DAD4CB9578A08FDD0 name=H_PS_PSSID value=1450_19035_21122_17001_21454_21409_21394_21377_21526_21189_21398 name=PSTM value=1478834132 name=BDSVRTM value=0 name=BD_HOME value=0
이렇게 우리는 가장 간단한 쿠키를 얻었습니다.
2. 쿠키를 파일로 저장
위에서 쿠키를 얻었으니 이제 쿠키를 저장하는 방법을 알아봅니다. 여기서는 MozillaCookieJar 하위 클래스를 사용하여 쿠키를 저장합니다.
예:
#coding=utf-8 import cookielib import urllib2 mycookie = cookielib.MozillaCookieJar() #声明一个MozillaCookieJar的类对象保存cookie(注意MozillaCookieJar的大小写问题) handler = urllib2.HTTPCookieProcessor(mycookie) #利用urllib2库中的HTTPCookieProcessor来声明一个处理cookie的处理器 opener = urllib2.build_opener(handler) #利用handler来构造opener,opener的用法和urlopen()类似 response = opener.open("http://www.baidu.com") #opener返回的一个应答对象response for item in mycookie: print"name="+item.name print"value="+item.value filename='mycookie.txt'#设定保存的文件名 mycookie.save(filename,ignore_discard=True, ignore_expires=True)
CookieJar 하위 클래스 MozillaCookiJar를 사용하여 위의 예를 변환하면 이 예를 얻을 수 있습니다. 이유는 무엇입니까? MozillaCookiJar를 CookieJar로 교체해 보겠습니다. 아래 그림을 보면 알 수 있습니다.
CookieJar는 저장 속성을 저장하지 않습니다~
save() 이에 메소드:ignore_discard는 쿠키가 삭제되더라도 쿠키를 저장하는 것을 의미하고,ignore_expires는 쿠키가 이미 파일에 존재하는 경우 원본 파일을 덮어쓰는 것을 의미합니다. 여기서는 둘 다 True로 설정합니다. 실행 후 쿠키는 cookie.txt 파일에 저장됩니다. 내용을 확인해 보겠습니다.
이렇게 하면 원하는 쿠키가 성공적으로 저장되었습니다
3. 파일에서 쿠키를 받아
<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><pre name="code" class="python">#coding=utf-8 import urllib2 import cookielib import urllib #第一步先给出账户密码网址准备模拟登录 postdata = urllib.urlencode({ 'stuid': '1605122162', 'pwd': 'xxxxxxxxx'#密码这里就不泄漏啦,嘿嘿嘿 }) loginUrl = 'http://ids.xidian.edu.cn/authserver/login?service=http%3A%2F%2Fjwxt.xidian.edu.cn%2Fcaslogin.jsp'# 登录教务系统的URL,成绩查询网址 # 第二步模拟登陆并保存登录的cookie filename = 'cookie.txt' #创建文本保存cookie mycookie = cookielib.MozillaCookieJar(filename) # 声明一个MozillaCookieJar对象实例来保存cookie,之后写入文件 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(mycookie)) #定义这个opener,对象是cookie result = opener.open(loginUrl, postdata) mycookie.save(ignore_discard=True, ignore_expires=True)# 保存cookie到cookie.txt中 # 第三步利用cookie请求访问另一个网址,教务系统总址 gradeUrl = 'http://ids.xidian.edu.cn/authserver/login?service' #只要是帐号密码一样的网址就可以, 请求访问成绩查询网址 result = opener.open(gradeUrl) print result.read()
核心思想:创建opener,包含了cookie的内容。之后在利用opener时,就会自动使用原先保存的cookie.
를 방문하세요.
읽어 주셔서 감사합니다. 모두에게 도움이 되기를 바랍니다. 이 사이트!
쿠키를 사용하여 시뮬레이션된 로그인 예제를 구현하는 Python 크롤러에 대한 자세한 설명을 보려면 PHP 중국어 웹사이트의 관련 기사를 참고하세요!