数据采集(五):用requests模拟登陆豆瓣
来源:互联网 发布:travelling light知乎 编辑:程序博客网 时间:2024/06/17 13:47
导入需要的库
# -*- encoding:utf-8 -*- import urllib2 import urllib import re import cookielib import requests import cStringIOfrom PIL import Image
定义登录url 表单信息 HTTP头
在登录页面上输入你的豆瓣账号,点击登录。
这个过程会以post的方式提交一个表单。如果使用了chrome浏览器,找到开发者工具,点开network项,在login的headers下可以找到Request Headers以及FormData信息
loginUrl = 'https://www.douban.com/accounts/login' formData={ "form_email":'xxxxxx@163.com', #这里填写你的账号 "form_password":'xxxxx' , #这里填写你的密码 'source':'index_nav'}headers={ 'Accept' : 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Host' : 'www.douban.com', 'Referer' : 'https://www.douban.com/', 'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1; rv:48.0)' }
获取session数据
session = requests.session()#发送post请求#session.post(loginUrl,data=formData,headers=headers) req = session.get('https://www.douban.com/',headers=headers, allow_redirects=False)
这样发起一次请求后,才会出现验证码图片以及验证码ID
模拟登陆
- 针对验证码问题,通过正则表达式获取验证码url,并手动填入
通过正则式得到验证码图片ID,验证码图片链接
#正则提取IDpattern = re.compile('<img id="captcha_image".*?id=(.*?)&',re.S) result = re.search(pattern,req.text)id = result.group(1)print id#正则提取验证码链接pattern = re.compile('<img id="captcha_image".*?src="(.*?) alt="captcha',re.S) result = re.search(pattern,req.text)imageURL = result.group(1).strip()print imageURL
43A2KR2vYTY1XIpK1lehODxN:enhttps://www.douban.com/misc/captcha?id=43A2KR2vYTY1XIpK1lehODxN:en&size=s"
打开图片,透过肉眼辨认单词验证码
#打开图像链接,输出图片request=urllib2.Request(imageURL,headers=headers)respHtml = urllib2.urlopen(request).read()img = Image.open(cStringIO.StringIO(respHtml))#img.show()import matplotlib.pyplot as pltimport numpy as np%matplotlib inlineplt.imshow(np.asarray(img))plt.axis('off')
验证码上的字母,验证码图片ID都是表单要求的信息,将其填入表单,再次发起post请求,便可成功登录。
print u'请输入你看到的字母'#人眼识别,填入验证码信息checkCode = raw_input()#表单中加入captcha-solutionformData["captcha-solution"]=checkCode#表单加入id信息formData["captcha-id"]=id#发送post请求session.post(loginUrl,data=formData,headers=headers) #站内的测试链接,用来判断是否登入成功url = "https://www.douban.com/people/90868630/"#用session访问code = session.get(url, headers=headers, allow_redirects=False)if code.status_code==200 : print u'登陆成功'else: print u'登录失败'
请输入你看到的字母electric登陆成功
阅读全文
0 0
- 数据采集(五):用requests模拟登陆豆瓣
- 数据采集(七):爬取豆瓣电影评论(scrapy+模拟登陆)
- PHP用curl模拟登陆并采集后台数据
- python 模拟登陆豆瓣
- 豆瓣模拟登陆
- Python requests 模拟登陆
- requests模拟登陆
- Python使用requests库模拟登陆网站的方式--以豆瓣为例
- Python使用requests库模拟登陆网站的方式--以豆瓣为例
- Python爬虫模拟登陆豆瓣
- python requests模拟登陆github
- 使用requests模拟登陆github
- 使用 python requests 模拟登陆
- 使用requests模拟登陆csdn
- 利用requests 模拟登陆csdn
- requests模拟登陆(session+url_token)
- 采集--封装模拟登陆
- Python数据采集之Requests
- C++更改窗口内输出位置
- OKapi BM25算法
- 2017暑假集训 div1 DP(2)
- ubuntu16.04 + pycaffe `GLIBCXX_3.4.21' not found
- 从零开始学习laravel web(四)
- 数据采集(五):用requests模拟登陆豆瓣
- 【脚本语言系列】关于Python基础知识容器,你需要知道的事
- 102. Binary Tree Level Order Traversal
- iOS中的缓存计算和清除
- 如何理解等错误率(EER, Equal Error Rate)?
- 476. Number Complement
- 常见排序算法之快速排序
- .Net文档图像处理工具包GdPicture.NET发布v14,提供最先进的PDF和文档成像技术
- I/O多路复用之比较select&poll&epoll