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

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

  1. 先正常登录一下豆瓣,然后使用火狐浏览器的httpfox插件获得post选项中的cookies,将cookies的内容分复制下来,保存为一个.txt文件
  2. 然后将txt中的内容用以下代码处理成字典,以便之后使用
    1. 1 import re
    2. 2 pattern = re.compile('(.*?)/.*?') #只需要提取cookies的前两项cookie sent,value就行了
    3. 3 fr = open('dealwithcookies.txt','r') #dealwithcookies是把网站上的cookies复制粘贴进去的文件
    4. 4 l = []
    5. 5 for item in fr.readlines():
    6. 6 item = str(item)
    7. 7 item = pattern.search(item).group(1)
    8. 8 #第七行使用item = re.search(pattern).group(1)会报错‘TypeError: expected string or buffer’,使用item = pattern.search(item).group(1) 就不会有这个错误
    9. 9 l.append(item)
    10. 10 fr.close()
    11. 11 cookies = {}
    12. 12 for i in l:
    13. 13 key, value = i.split('\t',1) #每行有多个‘\t’,只分开第一个
    14. 14 cookies[key] = value
  3. 用以下代码模拟登陆豆瓣:
    1. import requests
    2. s=requests.get(testurl, cookies=cookies)
  4. 此时就能登陆了!

问题:cookies必须手动获取吗?还在找解决方法

方法二:使用requests.post直接带上用户名/密码/headers等信息登陆豆瓣,因为豆瓣有时需要填写验证码,因此我先登陆一遍,使用豆瓣转到的带有验证码的网址将验证码下载到本地,手动输入验证码后,将需要post的data加上验证码信息再post。

代码:

  1. # -*- encoding:utf-8 -*-
  2. import requests
  3. import urllib2
  4. import re
  5. import urllib
  6. from bs4 import BeautifulSoup
  7. loginUrl = 'https://www.douban.com/accounts/login'
  8. formdata = {'form_email':'144XXXXX530@qq.com',
  9. 'form_password':'XXXXX',
  10. 'redir':'https://www.douban.com/people/67249180/likes/'}
  11. headers = {"User-Agent":'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0'}
  12. r = requests.post(loginUrl,data=formdata,headers=headers)
  13. page = r.text
  14. print r.url #此时page是需要填写验证码再进行登陆的界面
  15. soup = BeautifulSoup(page,'html.parser')
  16. captchaAddr = soup.find('img',id='captcha_image')['src']
  17. #利用正则表达式获取captcha的ID
  18. reCaptchaID = r'<input type="hidden" name="captcha-id" value="(.*?)"/'
  19. captchaID = re.findall(reCaptchaID,page)
  20. #print captchaID
  21. #保存到本地
  22. urllib.urlretrieve(captchaAddr,"captcha.jpg")
  23. captcha = raw_input('please input the captcha:')
  24.  
  25. formdata['captcha-solution'] = captcha
  26. formdata['captcha-id'] = captchaID
  27. r = requests.post(loginUrl,data = formdata,headers = headers) #获取验证码以后再提交一遍
  28. print r.url
  29. page = r.text
  30.  
  31. if r.url == 'https://www.douban.com/people/67249180/likes/':
  32. soup = BeautifulSoup(page,'html.parser')
  33. result = soup.findAll('div',class_='title')
  34. #print result
  35. for item in result:
  36. 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. 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 ...

  2. JS实现表格列宽拖动

    在数据表格中,有时候需要拖动表格宽度,查看完整的数据,是很常用的功能. 1 效果 可以用纯JS就可以实现,如下,是正常情况下的表格: 拖动表格标题中间线,拖动后效果如下: 查看DEMO 2 代码 HT ...

  3. 2018南京网络赛 - Skr 回文树

    题意:求本质不同的回文串(大整数)的数字和 由回文树的性质可知贡献只在首次进入某个新节点时产生 那么只需由pos和len算出距离把左边右边删掉再算好base重复\(O(n)\)次即可 位移那段写的略微 ...

  4. (转)DB2和 Oracle的并发控制(锁)比较

    DB2和 Oracle的并发控制(锁)比较 牛 新庄2005 年 12 月 26 日发布 原文:https://www.ibm.com/developerworks/cn/data/library/t ...

  5. First Android application

    In eclipse ADT : 1.创建一个新工程 File -> New -> Android Application Project 2.三个主要的文件 /src/MainActiv ...

  6. 全网最详细的Git学习系列之介绍各个Git图形客户端(Windows、Linux、Mac系统皆适用ing)(图文详解)

    不多说,直接上干货! 一.TortoiseGit - The coolest Interface to Git Version Control TortoiseGit 是 TortoiseSVN 的  ...

  7. javac符号名字的管理

    在符号表中,很重要的一项内容就是符号的名字.名字的管理,要解决的主要问题就是名字的变长问题.在javac中,所有的符号名字放到了一个公用字符池中,对于相同的名字只保存一个. 其中涉及到的主要类及关系如 ...

  8. python中的生成器(二)

    一. 剖析一下生成器对象 先看一个简单的例子,我们创建一个生成器函数,然后生成一个生成器对象 def gen(): print('start ..') for i in range(3): yield ...

  9. SQL 常用脚本,非常适用

    一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop database dbname 3.说明:备份sql server --- ...

  10. 八个常用的js正则表达式

    开篇:开发中如果有input输入框,难免就要写正则表达式,因此在这里总结了一些常见常用的正则表达式的书写方法,希望会大家有所帮助: 附图: 一.手机号码 $(document).ready(funct ...