Python 爬虫模拟登陆

来源:互联网 发布:live2d有mac版本的吗 编辑:程序博客网 时间:2024/05/16 11:16

作为一个啥也不懂的小白。为了毕业开始好好写程序和心得。

最近开始忙毕业项目,数据需要使用爬虫获取。于是打算把整个过程用csdn的博客记录下来

首先爬取网页,尤其是社交网站最需要的就是在爬取之前进行登录。

这个爬虫的目的是模拟登录豆瓣网,并验证性的做一个跳转。

主要难点还是在于验证码的处理上。

由于第一次请求的网页附带的验证码和第二次的不同所以会出现一个问题验证码不统一。

于是我们需要使用cookie将登录数据整合起来发送给需要接受的url

这是登录的网页的 url

这是网页以及post的信息



其中 post代表的是将这个页面的登录信息发送给 www.douban.com

所以具体的流程就是在第一个url中请求后判断有无验证码,再将登录信息发给需要访问的主页。


代码如下


# -*- coding: utf-8 -*-
"""Created on Wed Sep 13 14:40:35 2017@author: vcc"""import requestsimport urllibimport cookielibimport urllib2import reimport time'''cjar = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar))urllib2.install_opener(opener)'''#############装载到了urllib包下url = "https://accounts.douban.com/login"#mysession = requests.Session()#r = mysession.get(url,timeout=60*4)url3 = "https://douban.com/"pat_cap = "https://www.douban.com/misc/.*?=s"headers2 = ('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")temp = opener.open(url).read()time.sleep(3)captcha = re.compile(pat_cap).findall(str(temp))#captcha = urllib2.urlopen(url).xpath('//img[@id="captcha_image"]/@src').extract()if len(captcha)>0:    print "it have yanzhengma-------------------"    urllib.urlretrieve(captcha[0],"E://pythontest/captcha.png")    captcha_value = raw_input()        postdata = urllib.urlencode({    "form_email":"872823789@qq.com",    "form_password":"yangqi1994",    "captcha-solution":captcha_value    }).encode('utf-8')else:    print "nothave yanzhengma =--------------------------------------"    postdata = urllib.urlencode({    "form_email":"872823789@qq.com",    "form_password":"yangqi1994"    }).encode('utf-8')time.sleep(4)req = urllib2.Request(url3,postdata)req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")cjar = cookielib.CookieJar()opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cjar))urllib2.install_opener(opener)##################urllib 的保存cookie 与程序出现的位置有关系  cookie保存的是第一次打开网页的时候的登录信息try:    response = opener.open(req)    result = response.read()    print resultexcept urllib2.HTTPError,e:    print eprint '------------------------------------------------------------------------------------------------------------'time.sleep(2)url2 = "https://www.douban.com/people/166640189/"'''req = urllib2.Request(url2)req.add_header('User-Agent',"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36")'''data = opener.open(req).read()print data

需要注意的是cookie添加的位置将影响到cookie信息的保存。

原创粉丝点击