利用Python完成简单的站点登陆

  最近学习到了爬虫,瞬时觉得很高大上,想取什么就取什么,感觉要上天。这里分享一个简单的登陆抽屉新热榜的教程(因为它不需要验证码,目前还没有学会图像识别。哈哈),供大家学习。

需要的知识点储备

  本次爬虫脚本依赖两个模块:requests模块,BeautifulSoup模块。其中requests模块完成url的请求,而BeautifulSoup模块负责解析Html标签。

  主要的用法在上一讲已经列出,这里不再赘述。

思路

   和爬取图片的思路是相同的,首先我们人工登陆一次,确认每次交互发送接受的数据。

打开首页查看交互信息

  在浏览器里访问 http://dig.chouti.com/ 打开控制台,查看网络请求信息,发现在get请求的应答信息中包涵了cookies。

点击登陆后的交互信息

   点击登陆后查看网络信息,发现只发送了用户名、密码、以及是否保存密码等参数。

    疑问:我们知道为了防止xss攻击,网站都会做一些基础的防护,比如csrf_token等,但是这里并没有看到携带什么token数据,难道是抽屉没有进行防护吗?其实不是的,目前大部分网站都采用的方式是,第一个get请求会发送未认证的cookie,当用户登陆时携带该cookies,服务端对cookies进行认证,如果登陆时没有携带cookies,服务端将会拒绝服务,所以我们要记录第一个get请求的cookies。

点赞后提交的信息

  通过查看网络交互信息后发现,点赞后,只是向服务端发送了文章的ID。

流程

  根据以上思路得出以下步骤:

  1. 发送get请求获取页面信息,储存cookies信息
  2. 向登陆页发送post请求,携带cookies信息
  3. 由于返回了两次cookies,保险起见,创建一个cookies字典,把多次返回的cookies,一一存储后整体提交。
  4. 登陆成功后,找到看到的所有文章标签,获取它的linksid
  5. 发送post请求携带linksid,进行点赞操作

完成的代码

import requests
from bs4 import BeautifulSoup # get请求cookies
response = requests.get('http://dig.chouti.com/')
get_cookies = response.cookies # post请求cookies
response = requests.post('http://dig.chouti.com/login',
data={
'phone':8613526773228,
'password': 'aini3845',
'oneMonth': '1',
},
cookies=get_cookies
)
login_cookies = response.cookies # 组件cookies
all_cookies = {}
all_cookies.update(get_cookies)
all_cookies.update(login_cookies) # 查询文章列表
response = requests.get('http://dig.chouti.com/',cookies=all_cookies)
soup = BeautifulSoup(response.text,'html.parser')
tag = soup.find(id="content-list") # 点赞的前缀url
urls = 'http://dig.chouti.com/link/vote' # 点赞操作
for item in tag.find_all(name='div',attrs={'class':'part2'}):
if item.get('share-linkid'):
link_id = item.get('share-linkid')
response = requests.post(urls+'?linksId=%s' % link_id,cookies=all_cookies)
print(response.text)

Python爬虫学习 - day2 - 站点登陆的更多相关文章

  1. Python爬虫学习笔记——豆瓣登陆(一)

    #-*- coding:utf-8 -*- import requests from bs4 import BeautifulSoup import html5lib import re import ...

  2. Python爬虫学习笔记——豆瓣登陆(三)

    之前是不会想到登陆一个豆瓣会需要写三次博客,修改三次代码的. 本来昨天上午之前的代码用的挺好的,下午时候,我重新注册了一个号,怕豆瓣大号被封,想用小号爬,然后就开始出问题了,发现无法模拟登陆豆瓣了,开 ...

  3. Python爬虫学习笔记——豆瓣登陆(二)

    昨天能够登陆成功,但是不能使用cookies,今天试了一下requests库的Session(),发现可以保持会话了,代码只是稍作改动. #-*- coding:utf-8 -*- import re ...

  4. python爬虫学习 —— 总目录

    开篇 作为一个C党,接触python之后学习了爬虫. 和AC算法题的快感类似,从网络上爬取各种数据也很有意思. 准备写一系列文章,整理一下学习历程,也给后来者提供一点便利. 我是目录 听说你叫爬虫 - ...

  5. python爬虫学习(1) —— 从urllib说起

    0. 前言 如果你从来没有接触过爬虫,刚开始的时候可能会有些许吃力 因为我不会从头到尾把所有知识点都说一遍,很多文章主要是记录我自己写的一些爬虫 所以建议先学习一下cuiqingcai大神的 Pyth ...

  6. Python爬虫学习:三、爬虫的基本操作流程

    本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:三.爬虫的基本操作与流程 一般我们使用Python爬虫都是希望实现一套完整的功能,如下: 1.爬虫目标数据.信息: 2.将 ...

  7. Python爬虫学习:四、headers和data的获取

    之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...

  8. Python爬虫学习:二、爬虫的初步尝试

    我使用的编辑器是IDLE,版本为Python2.7.11,Windows平台. 本文是博主原创随笔,转载时请注明出处Maple2cat|Python爬虫学习:二.爬虫的初步尝试 1.尝试抓取指定网页 ...

  9. 《Python爬虫学习系列教程》学习笔记

    http://cuiqingcai.com/1052.html 大家好哈,我呢最近在学习Python爬虫,感觉非常有意思,真的让生活可以方便很多.学习过程中我把一些学习的笔记总结下来,还记录了一些自己 ...

随机推荐

  1. Python 3基础教程22-单个列表操作

    本文来介绍列表的操作,先看看单个列表的操作,列表有多个方法.以下多行代码,建议你写一个方法,测试运行一个方法,不然看起来很乱. # 元组操作 x = [5,6,2,1,6,7,2,7,9] # app ...

  2. LeetCode 82 ——删除排序链表中的重复元素 II

    1. 题目 2. 解答 新建一个链表,并添加一个哨兵结点,从前向后开始遍历链表. 如果下一个结点的值和当前结点的值相等,则循环向后遍历直到找到一个和当前结点值不相等的结点: 反之,如果下一个结点的值和 ...

  3. Java生成C#可用Model包

    项目需要提供接口给.NET团队使用,为方便大伙,特地写一个从Java接口生成C#可用Model包的工具Class 主Class是一个Controller,可以随时进行生成 package com.fa ...

  4. lintcode-95-验证二叉查找树

    95-验证二叉查找树 给定一个二叉树,判断它是否是合法的二叉查找树(BST) 一棵BST定义为: 节点的左子树中的值要严格小于该节点的值. 节点的右子树中的值要严格大于该节点的值. 左右子树也必须是二 ...

  5. systemtap没找到函数变量

    为啥systemtap没找到函数 hon@station6:~/codebox/stap/net$ sudo stap -L 'kernel.function("sock_recvmsg_n ...

  6. TCP的挥手协议和握手协议

    三次握手协议:三次握手协议的主要过程是交互彼此之间的初始序列号,如果没有确认的ACK帧可以么?肯定是可以的 client A -------> server B client A 发送了自己的初 ...

  7. 配置Mac自带的Apache http服务器

    Mac系统是自带Apache,所以很方便我们做一些http测试. 我可以先启动默认的服务器 $ sudo apachectl start 在浏览器打开:http://localhost 将会看到下面信 ...

  8. sqoop将oracle数据导入hdfs集群

    使用sqoop将oracle数据导入hdfs集群 集群环境: hadoop1.0.0 hbase0.92.1 zookeeper3.4.3 hive0.8.1 sqoop-1.4.1-incubati ...

  9. [Leetcode] candy 糖果

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  10. 洛谷 P1415 拆分数列 解题报告

    拆分数列 题目背景 [为了响应党中央勤节俭.反铺张的精神,题目背景描述故事部分略去^-^] 题目描述 给出一列数字,需要你添加任意多个逗号将其拆成若干个严格递增的数. 如果有多组解,则输出使得最后一个 ...