http://blog.csdn.net/pipisorry/article/details/47980653

爬虫爬网站不免遇到需要登录的问题. 登录的时候可能还会碰到需要填验证码的问题, 有的验证码甚至是拖动拼图来完成的. 虽然现在这些都有开源解决方案, 但是假设现在主要的精力想要放在如何解析html, 或者验证抓取算法上, 而不是通过登录验证上, 那么开源解决方案并不是最好的解决方案.更好的方案是获取浏览器的 Cookies, 然后让 requests 这个库来直接使用登录好的 Cookies.

获取 Chrome 浏览器的 Cookies 信息的函数
程序在 Windows 下调试通过, 因为 C 盘需要特殊权限来读写文件, 因此程序先将 Cookies 数据库文件拷贝到当前目录.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
__author__ = 'pi'
__email__ = 'pipisorry@126.com'
"""
import subprocess
import sqlite3
import win32cryptimport requestsSOUR_COOKIE_FILENAME = r'C:\Users\pi\AppData\Local\Google\Chrome\User Data\Default\Cookies'
DIST_COOKIE_FILENAME = '.\python-chrome-cookies'

def get_chrome_cookies(url):
    subprocess.call(['copy', SOUR_COOKIE_FILENAME, DIST_COOKIE_FILENAME], shell=True)conn = sqlite3.connect(".\python-chrome-cookies")ret_dict = {}for row in conn.execute("SELECT host_key, name, path, value, encrypted_value FROM cookies"):
        # if row[0] not in url:
        if row[0] != url:
            continue
        print(row[0])ret = win32crypt.CryptUnprotectData(row[4], None, None, None, 0)ret_dict[row[1]] = ret[1].decode()conn.close()subprocess.call(['del', '.\python-chrome-cookies'], shell=True)return ret_dict

使用requests

DOMAIN_NAME = '.jobbole.com'
get_url = r'http://www.jobbole.com/'
response = requests.get(get_url, cookies=get_chrome_cookies(DOMAIN_NAME))
print(response.text)

Note: 要安装requests库,安装及使用blog[python爬虫 - python requests网络请求简洁之道]

使用urllib

import urllib.requestDOMAIN_NAME = '.jobbole.com'
get_url = r'http://www.jobbole.com/'
headers = {'Cookie': ['='.join((i, j)) for i, j in get_chrome_cookies(DOMAIN_NAME).items()][0]}
request = urllib.request.Request(get_url, headers=headers)
response = urllib.request.urlopen(request)
print(response.read().decode())

Note:

1. chrome浏览器加密后的密钥存储于%APPDATA%\..\Local\Google\Chrome\User Data\Default\Login Data"下的一个SQLite数据库中,可以通过Sqlite浏览器来查看一下登陆文件中的数据。密码是调用Windows API函数CryptProtectData来加密的。这意味着,只有用加密时使用的登陆证书,密码才能被恢复。而这根本不是问题,在用户登陆环境下执行解密就OK。SQLite数据库中password_value(是二进制数据,所以SQLite浏览器不能显示)。而破解密码,只需要调用Windows API中的CryptUnprotectData函数。[谷歌Chrome浏览器是如何存储密码的][浏览器是如何存储密码的]

2. Python为调用Windows API准备了一个完美的叫做pywin32的库。只有安装了pywin32才能调用win32crypt。安装教程见[linux和windows下安装python拓展包]

当你的输出中存在“个人主页”“退出登录”字样,就说明登录成功了,否则只会有“登录”“注册”之类的字符串。

此方法同样可以应用于知乎等等网站的登录。

皮皮Blog

获取 Chrome 浏览器的 Cookies 信息的的另一种方法

chrome > 更多工具 > javascript控制台 > 对应当前页面输入document.cookie。就可以得到当前网页的cookie相关内容,复制到代码中就可以使用了。

或者使用fiddler2,headers中找到Cookie: wordpress_logged_in_0efdf49af511fd88681529ef8c2e5fbf=*************************[cookie登录实战 - 也可以下载软件Fiddler部分]

wordpress_logged_in_0efdf49af511fd88681529ef8c2e5fbf=pipiyn%7C1440989529%7C45ec5e30a3b24a68208815cc5c572c14

get_url = r'http://www.jobbole.com/'
cookies = {'wordpress_logged_in_0efdf49af511fd88681529ef8c2e5fbf': '***username****%*******%**********'}
response = requests.get(get_url, cookies=cookies)
print(response.text)

Note:

1. domain.com 是一级域名,www.domain.com 是域名 domain.com 的一个比较特殊的二级域名。他的特殊就在于现在的实践中,人们在解析域名的的时候,在惯例和默认的情况下,是把 www.domain.com 这个二级域名指向它的一级域名 domain.com。因此,现在的大部分情况下,domain.com 和 www.domain.com,都是一样的。 但是如果在解析域名的时候,没有做这样的设定,也可能就会有区别。

2. 不过可能document.cookie 获取到 www.domain.com 的 cookies, 而不是 .domain.com 的。

from:http://blog.csdn.net/pipisorry/article/details/47980653

ref:Python 爬虫解决登录问题的另类方法

python3爬虫 - 利用浏览器cookie登录相关推荐

  1. python3爬虫实例代码-Python3爬虫带上cookie的实例代码

    Cookie的英文原意是"点心",它是在客户端访问Web服务器时,服务器在客户端硬盘上存放的信息,好像是服务器发送给客户的"点心".服务器可以根据Cookie来 ...

  2. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  3. python爬虫——利用 session 处理登录状态 github 登录实例

    更多精彩内容 Cookie Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器 Session session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构( ...

  4. Python3爬虫——利用百度翻译实现中文翻译英文

    ~ 天才不过是百分之一的灵感加上百分之九十九的汗水,但那百分之一的灵感远远比那百分之九十九的汗水重要. ~ 由于现在不知道如何获取sign,导致只能翻译一个句子就很尴尬,希望在后面的学习中可以解决此问 ...

  5. python爬虫qq好友信息,GitHub - equationl/QQzone_crawler: QQ 空间动态爬虫,利用cookie登录获取所有可访问好友空间的动态保存到本地...

    关于 Edit by equationl 优先在 码云 上更新 该项目修改自 xjr7670 的 QQzone_crawler 原作者说明: QQ空间动态爬虫 修改了什么? 爬取完整的评论列表 爬取点 ...

  6. python获取登录后的cookie_python爬虫使用cookie登录详解

    前言: 什么是cookie? Cookie,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密). 比如说有些网站需要登录后才能访问某个页面,在登录之前,你想 ...

  7. 【Python3爬虫(三)】【urlib.request模块】【cookie+Request】

    上一篇:[Python3爬虫(二)][urlib.request模块][付费代理+auth认证] ++++++++++开始线++++++++++++++++++ 文章目录 一. cookie 1.1 ...

  8. python3爬虫系列23之selenium+腾讯OCR识别验证码登录微博且抓取数据

    python3爬虫系列23之selenium+腾讯OCR识别验证码登录微博且抓取数据 1.前言 上一篇是一个 python3爬虫系列22之selenium模拟登录需要验证码的微博且抓取数据, 我们是首 ...

  9. Cookie登录爬取实战:Python 利用urllib库的cookie实现网站登录并抓取

    1 环境:Python 3 +urllib库 实战网站:http://www.mjzcnd.com/  梅江之春论坛网站 2 背景: 现在许多网站都需要登录后才能访问某个页面,在登陆之前,我们是没有权 ...

  10. pythonrequest得替代_Python爬虫通过替换http request header来欺骗浏览器实现登录功能...

    以豆瓣为例,访问https://www.douban.com/contacts/list 来查看自己关注的人,要登录才能查看. 如果用requests.get()方法获取这个http,没登录只能抓取回 ...

最新文章

  1. Perforce使用之创建DEPOT流程
  2. 【Flutter】Hero 动画 ( Hero 实现径向动画 | Hero 组件 createRectTween 设置 )
  3. [洛谷2月月月赛]富金森林公园
  4. 物联网时代,对产品经理有哪些新的要求?
  5. 让Win32窗口程序拥有控制台窗口
  6. db服务器作用,数据库服务器
  7. JAVA入门级教学之(classpath的配置)
  8. 企业微信怎么输入服务器id,系统账号绑定企业微信成员id
  9. 事件冒泡、事件捕获、事件委托
  10. [项目回顾]基于Redis的在线用户列表解决方案
  11. [备忘]windows下安装PHP环境php.ini-recommended 跟php.ini-dist 的差别之处
  12. 二叉树的inorder实现:递归、栈、Morris遍历
  13. 88se9230 linux raid,Marvell发布全球首颗PCI-E 2.0 x2 SATA 6Gbps主控
  14. Jensen不等式及其扩展
  15. 全球与中国混频器市场现状及未来发展趋势
  16. SQL Server 下载和安装详细教程(点赞收藏)
  17. 如何做gif动图表情包?轻松一键快速制作gif表情包
  18. 低代码开发平台是什么?
  19. mysql更改date为ym_关于日期格式设置及转换
  20. C# WinForms窗体淡出效果

热门文章

  1. ACM学习历程—HDU5396 Expression(递推 计数)
  2. Winform 可取消的单选按钮(RadioButton)
  3. execCommand指令集详解
  4. (MathType)LaTeX风格公式样式
  5. SQL中WHERE子句介绍
  6. ProviderManager
  7. vue父子组件的传值
  8. yum 崩溃的解决方法
  9. 【BZOJ4818】序列计数(动态规划,生成函数)
  10. (63)通信协议之一json