python模拟登陆豆瓣——简单方法
学爬虫有一段时间了,前面没有总结又重装了系统,导致之前的代码和思考都没了。。所以还是要及时整理总结备份。下面记录我模拟登陆豆瓣的方法,方法一登上了豆瓣,方法二重定向到了豆瓣中“我的喜欢”列表,获取了第一页上我喜欢的帖子标题。
方法一:使用requests库和cookies登陆
- 先正常登录一下豆瓣,然后使用火狐浏览器的httpfox插件获得post选项中的cookies,将cookies的内容分复制下来,保存为一个.txt文件
- 然后将txt中的内容用以下代码处理成字典,以便之后使用
- 1 import re
- 2 pattern = re.compile('(.*?)/.*?') #只需要提取cookies的前两项cookie sent,value就行了
- 3 fr = open('dealwithcookies.txt','r') #dealwithcookies是把网站上的cookies复制粘贴进去的文件
- 4 l = []
- 5 for item in fr.readlines():
- 6 item = str(item)
- 7 item = pattern.search(item).group(1)
- 8 #第七行使用item = re.search(pattern).group(1)会报错‘TypeError: expected string or buffer’,使用item = pattern.search(item).group(1) 就不会有这个错误
- 9 l.append(item)
- 10 fr.close()
- 11 cookies = {}
- 12 for i in l:
- 13 key, value = i.split('\t',1) #每行有多个‘\t’,只分开第一个
- 14 cookies[key] = value
- 1 import re
- 用以下代码模拟登陆豆瓣:
- import requests
- s=requests.get(testurl, cookies=cookies)
- import requests
- 此时就能登陆了!
问题:cookies必须手动获取吗?还在找解决方法
方法二:使用requests.post直接带上用户名/密码/headers等信息登陆豆瓣,因为豆瓣有时需要填写验证码,因此我先登陆一遍,使用豆瓣转到的带有验证码的网址将验证码下载到本地,手动输入验证码后,将需要post的data加上验证码信息再post。
代码:

- # -*- encoding:utf-8 -*-
- import requests
- import urllib2
- import re
- import urllib
- from bs4 import BeautifulSoup
- loginUrl = 'https://www.douban.com/accounts/login'
- formdata = {'form_email':'144XXXXX530@qq.com',
- 'form_password':'XXXXX',
- 'redir':'https://www.douban.com/people/67249180/likes/'}
- headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'}
- r = requests.post(loginUrl,data=formdata,headers=headers)
- page = r.text
- print r.url #此时page是需要填写验证码再进行登陆的界面
- soup = BeautifulSoup(page,'html.parser')
- captchaAddr = soup.find('img',id='captcha_image')['src']
- #利用正则表达式获取captcha的ID
- reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
- captchaID = re.findall(reCaptchaID,page)
- #print captchaID
- #保存到本地
- urllib.urlretrieve(captchaAddr,"captcha.jpg")
- captcha = raw_input('please input the captcha:')
- formdata['captcha-solution'] = captcha
- formdata['captcha-id'] = captchaID
- r = requests.post(loginUrl,data = formdata,headers = headers) #获取验证码以后再提交一遍
- print r.url
- page = r.text
- if r.url == 'https://www.douban.com/people/67249180/likes/':
- soup = BeautifulSoup(page,'html.parser')
- result = soup.findAll('div',class_='title')
- #print result
- for item in result:
- print item.find('a').get_text()

其中字典的键值都是通过网页源代码获得的。
使用BeautifulSoup匹配关键词,也可以使用正则表达式,看你觉得哪一种的逻辑好理解了。
python模拟登陆豆瓣——简单方法的更多相关文章
- Python模拟登陆万能法-微博|知乎
Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...
- Python爬虫(二十二)_selenium案例:模拟登陆豆瓣
本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
- Python模拟登陆TAPD
因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找. 2018-9-30 19:12:44 几步走 模拟登录tapd 抓取wiki页左侧 ...
- Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享
Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...
- selenium 模拟登陆豆瓣,爬取武林外传的短评
selenium 模拟登陆豆瓣,爬去武林外传的短评: 在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是 ...
- Scrapy模拟登陆豆瓣抓取数据
scrapy startproject douban 其中douban是我们的项目名称 2创建爬虫文件 进入到douban 然后创建爬虫文件 scrapy genspider dou douban. ...
- python 模拟登陆,请求包含cookie信息
需求: 1.通过GET方法,访问URL地址一,传入cookie参数 2.根据地址一返回的uuid,通过POST方法,传入cooki参数 实现思路: 1.理解http的GET和POST差别 (网上有很多 ...
- python模拟登陆之下载
好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...
随机推荐
- 06-图2 Saving James Bond - Easy Version (25 分)
This time let us consider the situation in the movie "Live and Let Die" in which James Bon ...
- JS实现表格列宽拖动
在数据表格中,有时候需要拖动表格宽度,查看完整的数据,是很常用的功能. 1 效果 可以用纯JS就可以实现,如下,是正常情况下的表格: 拖动表格标题中间线,拖动后效果如下: 查看DEMO 2 代码 HT ...
- 2018南京网络赛 - Skr 回文树
题意:求本质不同的回文串(大整数)的数字和 由回文树的性质可知贡献只在首次进入某个新节点时产生 那么只需由pos和len算出距离把左边右边删掉再算好base重复\(O(n)\)次即可 位移那段写的略微 ...
- (转)DB2和 Oracle的并发控制(锁)比较
DB2和 Oracle的并发控制(锁)比较 牛 新庄2005 年 12 月 26 日发布 原文:https://www.ibm.com/developerworks/cn/data/library/t ...
- First Android application
In eclipse ADT : 1.创建一个新工程 File -> New -> Android Application Project 2.三个主要的文件 /src/MainActiv ...
- 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)
不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的 ...
- javac符号名字的管理
在符号表中,很重要的一项内容就是符号的名字.名字的管理,要解决的主要问题就是名字的变长问题.在javac中,所有的符号名字放到了一个公用字符池中,对于相同的名字只保存一个. 其中涉及到的主要类及关系如 ...
- python中的生成器(二)
一. 剖析一下生成器对象 先看一个简单的例子,我们创建一个生成器函数,然后生成一个生成器对象 def gen(): print('start ..') for i in range(3): yield ...
- SQL 常用脚本,非常适用
一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...
- 八个常用的js正则表达式
开篇:开发中如果有input输入框,难免就要写正则表达式,因此在这里总结了一些常见常用的正则表达式的书写方法,希望会大家有所帮助: 附图: 一.手机号码 $(document).ready(funct ...