python爬虫模拟登录网站(一)-----豆瓣
2017-03-20 20:37
1016 查看
在爬虫模拟登录的程序实现中,有很多网站比如新浪登录过程很复杂,而且还有很多数据加密传输,但是豆瓣就稍微简单一点了
可是本是初学python爬虫,所以在自己写登录程序时还是遇到了很多问题。
不多BB,进入正文。
一、分析一下吧
1、登录程序中,看到要先找到登录地址url=“https://accounts.douban.com/login”,我使用的是火狐的HttpFox,先在浏览器上使用账户密码登录一下,使用工具HttpFox获取到header和提交的数据
2、在post data中可以看到几个传输的参数,提交的数据在源码里找到相应的位置,其值就可以在源码里面提取出来。
3、在登录的时候还需要判断是否需要输入验证码,在我的程序里使用的是半自动化,从源码中获取到验证码图片的地址,程序自动打开浏览器并打开图片,人为手动在控制台输入验证码。
4、豆瓣的登录程序较简单,所以只需要找到提交的数据,然后模拟提交并获取到cookie就可以登录进去了。
5、问题就来了,对于初学者的我来说,获取cookie的方法还不是很熟悉,所以花了很多时间来完成了这个程序,主要问题是在提交数据方面正确,各种数据获取也正确,但是就是登录不进去,响应返回的是一大堆乱码的东西,后来对cookie进行了值的跟踪监测,总算发现了问题,在程序获取cookie时并没有获取到原始cookie,导致后面提交了表单后的cookie出错,也是导致登录失败的主要原因。经过逻辑和cookie的使用方式的更正后,程序模拟登录成功了。!!
二、程序实现
直接上全部源代码吧。。
可是本是初学python爬虫,所以在自己写登录程序时还是遇到了很多问题。
不多BB,进入正文。
一、分析一下吧
1、登录程序中,看到要先找到登录地址url=“https://accounts.douban.com/login”,我使用的是火狐的HttpFox,先在浏览器上使用账户密码登录一下,使用工具HttpFox获取到header和提交的数据
2、在post data中可以看到几个传输的参数,提交的数据在源码里找到相应的位置,其值就可以在源码里面提取出来。
3、在登录的时候还需要判断是否需要输入验证码,在我的程序里使用的是半自动化,从源码中获取到验证码图片的地址,程序自动打开浏览器并打开图片,人为手动在控制台输入验证码。
4、豆瓣的登录程序较简单,所以只需要找到提交的数据,然后模拟提交并获取到cookie就可以登录进去了。
5、问题就来了,对于初学者的我来说,获取cookie的方法还不是很熟悉,所以花了很多时间来完成了这个程序,主要问题是在提交数据方面正确,各种数据获取也正确,但是就是登录不进去,响应返回的是一大堆乱码的东西,后来对cookie进行了值的跟踪监测,总算发现了问题,在程序获取cookie时并没有获取到原始cookie,导致后面提交了表单后的cookie出错,也是导致登录失败的主要原因。经过逻辑和cookie的使用方式的更正后,程序模拟登录成功了。!!
二、程序实现
直接上全部源代码吧。。
# DoubanMain.py import urllib2 import re import cookielib import EncodePostData import webbrowser class DOUBAN: def __init__(self, username, password): # 初始化登录地址、账号和密码 self.loginUrl = "https://accounts.douban.com/login" self.username = username self.password = password self.cookies = cookielib.CookieJar() self.headers = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Host': 'accounts.douban.com', 'Referer': 'https://accounts.douban.com/login?alias=&redir=https%3A%2F%2Fwww.douban.com%2F&source=index_nav&error=1001', 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0', 'Accept-Language': 'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3', 'Accept-Encoding': 'gzip, deflate, br', 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': '129' } # 登录程序 def login(self): self.EnableCookieAndProxy() # 使用代理 source, redir, yzmUrl, captchaID = self.getData() # 返回相关post数据和验证码链接 if yzmUrl: # 如果有验证码 captchaSolution = self.getCaptchSolution(yzmUrl) # 获取验证码 print captchaSolution else: captchaSolution = "" postData = EncodePostData.PostEncode(self.username, self.password, source, redir, captchaSolution, captchaID) request = urllib2.Request(self.loginUrl, postData, self.headers) response = urllib2.urlopen(self.loginUrl, postData) # 添加代理和cookie def EnableCookieAndProxy(self): # 添加cookie cookieSupport = urllib2.HTTPCookieProcessor(self.cookies) # 添加代理 proxySupport = urllib2.ProxyHandler({'http': '58.222.254.11:3128'}) # 使用代理 opener = urllib2.build_opener(proxySupport, cookieSupport, urllib2.HTTPHandler) urllib2.install_opener(opener) # 构建对应的opener # 获取post数据和验证码链接 def getData(self): page = urllib2.urlopen(self.loginUrl).read() # source, redir, captchaID, login, yzm pattern = re.compile('<input name="source".*?value="(.*?)".*?<input name="redir".*?value="(.*?)".*?<img id="captcha_image" src="(.*?)".*?<input.*?name="captcha-id" value="(.*?)"', re.S) items = re.search(pattern, page) print "captcha-id: ", items.group(4) # source redir yzmUrl captcha-id return items.group(1), items.group(2), items.group(3), items.group(4) # 读取验证码 def getCaptchSolution(self, yzmUrl): webbrowser.open_new_tab(yzmUrl) # 打开验证码图片 # 手动输入验证码 yzm = raw_input("请输入浏览器显示的验证码: ") return str(yzm) # 测试代码 db = DOUBAN("这是账号", "这是密码") db.login()
# EncodePostData.py # 封装post数据 import urllib def PostEncode(username, password, source, redir, captchaSolution, captchaID): postData = { 'form_email': username, 'form_password': password, 'source': source, 'redir': redir, 'login': "登录" } if captchaSolution: postData['captcha-solution'] = captchaSolution postData['captcha-id'] = captchaID print "post data: ", postData return urllib.urlencode(postData)
相关文章推荐
- Python爬虫:模拟登录带验证码网站
- Python爬虫之模拟登录豆瓣获取最近看过的电影
- Python爬虫之模拟CSDN网站登录
- Python爬虫模拟登录带验证码网站
- Python爬虫模拟登录带验证码网站
- 爬虫三部曲之(三):Python模拟登录云笔记网站并爬取笔记内容
- Python爬虫模拟登录带验证码网站
- [python 爬虫学习]利用cookie模拟网站登录
- Python爬虫模拟登录带验证码网站
- python实现简单爬虫模拟登录淘宝(cookie简介)
- python爬虫实战之模拟正方教务系统登录查询成绩
- python 利用selenium模拟登录帐号验证网站并获取cookie
- Python手动构造Cookie模拟登录后获取网站页面内容
- Python使用requests库模拟登陆网站的方式--以豆瓣为例
- 【网络爬虫】【python】网络爬虫(三):模拟登录——伪装浏览器登录爬取过程
- Python爬虫实战(5):模拟登录淘宝并获取所有订单(1)
- python实现网站的模拟登录
- python爬虫实战之模拟正方教务系统登录查询成绩
- python实现网站的模拟登录
- python模拟登录 网站