代码:

  1 #coding: utf-82 3 import requests4 from HTMLParser import HTMLParser5 6 7 class DoubanClient(object):8     def __init__(self):9         object.__init__(self)10 11         myheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36','Origin': 'https://accounts.douban.com'}        #浏览器开发者:Request Headers12 13         self.session = requests.session()       #requests包 创建session14         self.session.headers.update(myheaders)  #将定制的header加入session15 16 17     def login(self, username, password,source='None',redir='https://www.douban.com/',login='登录'):18         #浏览器开发者:Form Data19 20         url = 'https://accounts.douban.com/login'       #网页URL21         r = self.session.get(url)       #用session访问该网页22         (captcha_id, captcha_url) = _get_captcha(r.content)     #调用get_captchar()解析网页中的内容,获取验证码的id和url23 24         #如果得到了验证码的id和url,提示用户打开url并输入其中的验证码25         if captcha_id:26             captcha_solution = raw_input('please input solution for captcha [%s]:' % captcha_url)27 28         url = 'https://accounts.douban.com/login'29         mydata = {'form_email': username,30                 'form_password': password,31                 'source': source,32                 'redir': redir,33                 'login': login}34         myheaders = {'referer': 'https://acocunts.douban.com/login',35                    'host': 'accounts.douban.com'}36         #浏览器开发者:Request Headers37 38         #将验证码的id和用户输入的验证码 加入post的data中39         if captcha_id:40             mydata['captcha-id'] = captcha_id41             mydata['captcha-solution'] = captcha_solution42 43         self.session.post(url, data=mydata, headers=myheaders)  #post发出请求44         print(self.session.cookies.items())45 46     #更改签名47     def edit_signature(self, username, signature):48         url = 'https://www.douban.com/people/%s/' % username    #网页URL49         r = self.session.get(url)       #用session访问该网页50         mydata = {'ck': _get_ck(r.content),51                 'signature': signature}52         myurl = 'https://www.douban.com/j/people/%s/edit_signature' % username53         myheaders = {'referer': url,54                    'host': 'www.douban.com',55                    'x-requested-with': 'XMLHttpRequest'}56         r = self.session.post(myurl, data=mydata, headers=myheaders)    #post57         print(r.content)58 59 60 def _attr(attrs, attrname):61     for attr in attrs:62         if attr[0] == attrname:63             return attr[1]64     return None65 66 67 def _get_captcha(content):68     #获取验证码的id和url        69     class CaptchaParser(HTMLParser):    #继承父类HTMLParser70         def __init__(self):71             HTMLParser.__init__(self)72             self.captcha_id = None      #默认值设为None73             self.captcha_url = None74 75         def handle_starttag(self, tag, attrs):76             if tag == 'img' and _attr(attrs, 'id') == 'captcha_image' and _attr(attrs, 'class') == 'captcha_image':77                 #根据网页框架进行条件限定,定位至验证码图片78                 self.captcha_url = _attr(attrs, 'src')  #得到验证码图片的url79 80             if tag == 'input' and _attr(attrs, 'type') == 'hidden' and _attr(attrs, 'name') == 'captcha-id':81                 #条件限定,定位至验证码id82                 self.captcha_id = _attr(attrs, 'value') #得到验证码的id value83 84     p = CaptchaParser()85     p.feed(content)     #feed()向解析器喂数据86     return p.captcha_id, p.captcha_url87 88 89 def _get_ck(content):90 91     class CKParser(HTMLParser):92         def __init__(self):93             HTMLParser.__init__(self)94             self.ck = None95 96         def handle_starttag(self, tag, attrs):97             if tag == 'input' and _attr(attrs, 'type') == 'hidden' and _attr(attrs, 'name') == 'ck':98                 #条件限定,定位至签名框99                 self.ck = _attr(attrs, 'value')
100
101     p = CKParser()      #实例化类
102     p.feed(content)     #feed()向解析器喂数据
103     return p.ck
104
105
106 if __name__ == '__main__':
107     c = DoubanClient()
108     c.login('791368726@qq.com', '**此处为密码**')
109     c.edit_signature('162101126', '**此处为签名**')

执行:

Google Chrome:

python爬虫(登录豆瓣并修改签名)相关推荐

  1. Python爬虫登录大学官网

    Python爬虫登录大学官网   通过python登录大学官网(当然首先要有账号密码),内容包括:如何使用chrome查看网页信息和网络请求.分析网站通过js加密用户密码的方式.使用python登录网 ...

  2. python 爬虫 微博 github_GitHub 热门:各大网站的 Python 爬虫登录汇总

    原标题:GitHub 热门:各大网站的 Python 爬虫登录汇总 (给数据分析与开发加星标,提升数据技能) 转自:机器之心,GitHub 作者:CriseLYJ 不论是自然语言处理还是计算机视觉,做 ...

  3. python 爬虫登录世纪佳缘

    python 爬虫登录世纪佳缘 程序运行相关环境: win7 python2.7.13 python requests包 python beautifulsoup包 代码示例: # -*- codin ...

  4. 使用Python爬虫获取豆瓣影评,并用词云显示

    使用Python爬虫获取豆瓣影评,并用词云显示 Python语言流行到现在,目前最受开发者喜爱的功能莫过于它的爬虫功能,以至于很多人以为Python的英语发音也是"爬虫",其实它是 ...

  5. Python 爬虫分析豆瓣 TOP250 之 信息字典 和 马斯洛的锥子

    问题 本文是对<Python 爬虫分析豆瓣 TOP250 告诉你程序员业余该看什么书?> 一文的补充 我们以<追风少年>为例 用chrome的developer tool查看源 ...

  6. Python爬虫(5):豆瓣读书练手爬虫

    Python爬虫(5):豆瓣读书练手爬虫 我们在之前的文章中基本上掌握了Python爬虫的原理和方法,不知道大家有没有练习呢.今天我就来找一个简单的网页进行爬取,就当是给之前的兵书做一个实践.不然不就 ...

  7. Python爬虫之豆瓣排行榜(正则表达式)

    Python爬虫之豆瓣排行榜(正则表达式) 1. 项目目标 使用Chrome浏览器打开网页https://maoyan.com/ ,切换到[榜单],[TOP100榜].本次项目就是要获取豆瓣排名Top ...

  8. python爬虫获取豆瓣图书Top250

    在上一篇博客<python爬虫获取豆瓣电影TOP250>中,小菌为大家带来了如何将豆瓣电影Top250的数据存入MySQL数据库的方法.这次的分享,小菌决定再带着大家去研究如何爬取豆瓣图片 ...

  9. Python爬虫之豆瓣上征婚交友的美女们

    我在刷豆瓣的时候发现,豆瓣上居然还有一个叫我被豆油表白了的交友话题,阅读量居然高达 8087734 次,拥有 1000+ 篇话题,几乎每篇平均被阅读了 8000+ ,看了一下里面的小姐姐照片还挺多的. ...

最新文章

  1. pip install lxml失败原因
  2. re.search中与正则表达式*结合使用的注意事项
  3. C实战:项目构建Make,Automake,CMake
  4. 新版vue-cli模板下本地开发环境使用node服务器跨域
  5. .NET中得到计算机硬件信息
  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的水果蔬菜商城管理系统
  7. python脚本入门_python 脚本学习(一)
  8. Kotlin(android)协程中文翻译
  9. intersection-over-union(IoU: 交并比)
  10. 广东2022年上半年系统集成项目管理工程师下午真题及答案解析
  11. XJOI一级题库所有题解(传送门)
  12. jQuery手动触发事件
  13. dataframe动态命名(读取不同文件并规律命名)
  14. 有效提高关键词排名SEO技巧实论
  15. 创建内嵌SIS文件的安装包
  16. java远程连接fpt_java远程连接本地fpt
  17. 微交易平台搭建开发-盘内实时K线对接
  18. 大数据开发跟大数据分析的区别是什么?
  19. Druid连接池开启数据库监控功能
  20. 初学者开发iOS游戏的入门必备用书——iOS 5 cocos2d游戏开发实战(第2版)

热门文章

  1. 从零开始学习Memcached之stats sizes命令测试
  2. 毕业于华东地质学院 计算机,主攻智能机器人控制等方向 王耀南当选中国工程院院士...
  3. “Microsoft Office Word 遇到问题需要关闭。我们对此引起的不便表示抱歉”处理方法之一
  4. 1024 程序员节岳麓对话、技术英雄会再奏时代新曲
  5. 如何使win10避免自动删除程序文件(疑似病毒),且使该文件能运行
  6. 利用PhotoScan生成无人机高精度正摄影像(可下载)
  7. PhotoShop 修复工具组
  8. 使用Python和OpenCV查找从摄像机到对象/标记的距离
  9. (内附免费下载地址)全网免费获取地形数据的方法
  10. U盘安装中标麒麟linux V6.0教程