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 win32crypt

import requests

SOUR_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:
] != url:
            continue
])
        ret ], )
        ret_dict[row[]] ].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.request

DOMAIN_NAME = '.jobbole.com'
get_url = r'http://www.jobbole.com/'
headers ]}
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 爬虫解决登录问题的另类方法

最新文章

  1. Android程序中--不能改变的事情
  2. Shader实例:NGUI制作网格样式血条
  3. 诺基亚N900使用技巧
  4. java MAVEN 项目出现红叉
  5. PowerShell控制台快捷键
  6. Map排序——按key排序,按value排序
  7. Objective-C设计模式——原型Prototype(对象创建)
  8. poj1003
  9. BZOJ1304: [CQOI2009]叶子的染色
  10. 网站开发进阶(十五)JS基础知识充电站
  11. Easy2Boot-小清新教程
  12. 推荐几个不错的h5游戏引擎
  13. 【 转】__try,__except,__finally,__leave异常模型机制
  14. 测试开发面试的Linux面试题总结之一:vim使用方法
  15. libcurl库的编译
  16. 转载【Ubuntu】Ubuntu14.04虚拟机调整窗口大小自适应VMware14窗口
  17. 员工管理系统(集合与IO流的结合使用 beta4.0 ObjectInputStream/ ObjectOutputStream)
  18. Unity C# 设计模式(二)简单工厂模式
  19. 微信接口调用'updateTimelineShareData','updateAppMessageShareData' 的踩坑记录
  20. JavaSE 面试题: 方法的参数传递机制

热门文章

  1. FJUT寒假作业第三周数蚂蚁(记录第一道并查集)
  2. docker环境 快速使用elasticsearch-head插件
  3. 安全框架Shiro
  4. 巧用第三方快速开发Android App 热门第三方SDK及框架
  5. NLP系列(5)_从朴素贝叶斯到N-gram语言模型
  6. 2017京东校招面试回忆(已成功拿到offer)
  7. 物料分类新增&更新
  8. springMVC+Hibernate4+Spring整合一(配置文件部分)
  9. scala模式匹配的使用
  10. JAXB(Java Architecture for XML Binding)