学爬虫有一段时间了,前面没有总结又重装了系统,导致之前的代码和思考都没了。。所以还是要及时整理总结备份。下面记录我模拟登陆豆瓣的方法,方法一登上了豆瓣,方法二重定向到了豆瓣中“我的喜欢”列表,获取了第一页上我喜欢的帖子标题。

方法一:使用requests库和cookies登陆

  1. 先正常登录一下豆瓣,然后使用火狐浏览器的httpfox插件获得post选项中的cookies,将cookies的内容分复制下来,保存为一个.txt文件
  2. 然后将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
  3. 用以下代码模拟登陆豆瓣:
    import requests
    s=requests.get(testurl, cookies=cookies)
  4. 此时就能登陆了!

问题: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模拟登陆豆瓣——简单方法的更多相关文章

  1. Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  2. Python爬虫(二十二)_selenium案例:模拟登陆豆瓣

    本篇博客主要用于介绍如何使用selenium+phantomJS模拟登陆豆瓣,没有考虑验证码的问题,更多内容,请参考:Python学习指南 #-*- coding:utf-8 -*- from sel ...

  3. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  4. Python模拟登陆TAPD

    因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找. 2018-9-30 19:12:44 几步走 模拟登录tapd 抓取wiki页左侧 ...

  5. Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享

    Python模拟登陆淘宝并统计淘宝消费情况的代码实例分享 支付宝十年账单上的数字有点吓人,但它统计的项目太多,只是想看看到底单纯在淘宝上支出了多少,于是写了段脚本,统计任意时间段淘宝订单的消费情况,看 ...

  6. selenium 模拟登陆豆瓣,爬取武林外传的短评

    selenium 模拟登陆豆瓣,爬去武林外传的短评: 在最开始写爬虫的时候,抓取豆瓣评论,我们从F12里面是可以直接发现接口的,但是最近豆瓣更新,数据是JS异步加载的,所以没有找到合适的方法爬去,于是 ...

  7. Scrapy模拟登陆豆瓣抓取数据

    scrapy  startproject douban 其中douban是我们的项目名称 2创建爬虫文件 进入到douban 然后创建爬虫文件 scrapy genspider dou douban. ...

  8. python 模拟登陆,请求包含cookie信息

    需求: 1.通过GET方法,访问URL地址一,传入cookie参数 2.根据地址一返回的uuid,通过POST方法,传入cooki参数 实现思路: 1.理解http的GET和POST差别 (网上有很多 ...

  9. python模拟登陆之下载

    好长时间没有更新博客了,哈哈. 今天公司给了这么一个需求,现在我们需要去淘宝获取上一天的订单号,然后再根据订单号去另一个接口去获取订单详情,然后再给我展示到web! 中间涉及到的技术点有: 模拟登陆 ...

随机推荐

  1. CodeForces - 556C-Case of Matryoshkas(思维)

    Andrewid the Android is a galaxy-famous detective. He is now investigating the case of vandalism at ...

  2. Flask中的before_request装饰器和after_request装饰器以及WTForms组件

    一.before_request装饰器和after_request装饰器 我们现在有一个Flask程序其中有3个路由和视图函数 from flask import Flask app = Flask( ...

  3. 1、 小白带你入坑xamarin系列之环境搭建和准备

    重点提示 由于xamarin发展更新很快 目前教程部分内容已经过时 请注意下载最新版本   2018.05.23 www.xamarin.com 1. 小白带你入坑xamarin系列之环境搭建和准备 ...

  4. redux概念介绍

    这一部分仅仅介绍react基本的概念,因为react不仅仅可以用在react中,还可以用在其他框架甚至原生 js 中.  所以这里只介绍通用的概念. redux使用场景 redux和vue中的vuex ...

  5. 解决Ubuntu系统的每次开机重启后,resolv.conf清空的问题和DNS域名解析问题(图文详解)

    不多说,直接上干货! 问题情况描述如下: 普及知识:   /etc/resolv.conf ,其实是一个Link .它其实指向的是 /run/resolvconf/resolv.conf.  Ubun ...

  6. 记一次接口调用耗时服务端PHP-FPM配置调优

    最近测试人员不时有反馈,APP首页打开会出现除了基本的页面布局,需要展示数据的地方都是空白. 想着最近首页接口有过调整,新增数据.会不会是接口改动导致的?? 但APP首页接口都是读取redis的,应该 ...

  7. HandlerInterceptor与MethodInterceptor

    HandlerInterceptor是springMVC项目中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行.实现一个HandlerInterceptor拦截器可以直接 ...

  8. SSRS 报表中的Chart在IE中不显示

    解决办法: 重启SSRS服务...

  9. SSIS教程:创建简单的ETL包 -- 3. 添加日志(Adding Logging)

    Microsoft Integration Services 包含日志记录功能,可通过提供任务和容器事件跟踪监控包执行情况以及进行故障排除. 日志记录功能非常灵活,可以在包级别或在包中的各个任务和容器 ...

  10. jquery里判断数组内是否包含了指定的值或元素的方法

    本文讲的是在jquery里,如何判断一个数组里是否包含了指定的值,变量,或其它对象元素的方法. 在jquery里,我们可以用$.inArray来判断一个数组里是否包含了指定的值或其它对象元素,来看一个 ...