python 代码里如何判断成功登录豆瓣

Python09

python 代码里如何判断成功登录豆瓣,第1张

#! py 3

# _*_ coding: utf-8 _*_

import os

import sqlite3

import requests

from win32.win32crypt import CryptUnprotectData

 

def getcookiefromchrome(host='.douban.com'):

'''最好还是从浏览器自动获取当前登录帐号的cookies,

然后再抓取内容,这里是演示从Google Chrome中获取cookies的例子。

host  登录服务器的主域名,注意要在前面加个点号。

'''

  cookiepath=os.environ['LOCALAPPDATA']+r"\Google\Chrome\User Data\Default\Cookies"

  sql="select host_key,name,encrypted_value from cookies where host_key='%s'" % host

  with sqlite3.connect(cookiepath) as conn:

    cu=conn.cursor()    

    cookies={name:CryptUnprotectData(encrypted_value)[1].decode() for host_key,name,encrypted_value in cu.execute(sql).fetchall()}

    print(cookies)

    return cookies

 

url='http://www.douban.com'

 

httphead={'User-Agent':('Mozilla/5.0 (Windows NT 6.2 WOW64) AppleWebKit/537.36 (KHTML, like Gecko)  Chrome/66.0.3359.181 Safari/537.36'),}

 

r=requests.get(url,headers=httphead,cookies=getcookiefromchrome('.douban.com'),allow_redirects=1)

print(r.text)

需要安装的第三方模块:requests,pywin32

那么你在用爬虫爬取的时候获得的页面究竟是哪个呢?

肯定是第二个,不可能说你不用登录就可以访问到一个用户自己的主页信息,那么是什么让同一个URL在爬虫访问时出现不同内容的情况呢?

在第一篇中我们提到了一个概念,cookie,因为HTTP是无状态的,所以对方服务器并不知道这次请求到底来自于谁,就好像突然你收到了一封信,上面让你给他寄一些东西,但是信上却没有他的联系方式。

在HTTP中也是如此,我们普通的请求都类似于匿名信,而cookie的出现,就是让这封信上盖上了你自己的名字。

在请求时附带上你的cookie,服务器放就会知道这次请求来自于谁,然后你点击个人信息页,服务器就知道是要返回这个cookie对应的用户的信息页了。

在谷歌浏览器中,你可以在控制台Application里面找到当前网站的所有cookie键值对。一般来说用于确认你个人信息的只有一个键值对,但是你也可以把所有的都用上,并不能保证对方服务器是不是对某些键值对也进行检查了。

很多网站在你没有登录的情况下并不会给过多的数据让你看,所以你的爬虫需要进行一次模拟登录。

模拟登录需要从一个网站的登录界面开始,因为我们要在这里用爬虫发送post请求附带账号密码来登录对方网站。

1.读取本地用户文件,或者账号名和密码

2.使用md5对用户密码进行加密

3.获取session的临时随机串及sessionid

4.对随机串及用户密码进行二次md5加密生成新的请求秘钥串

5.传递用户名、新的秘钥串及sessionid模拟用户登录