一些废话

看了一眼上一篇日志的时间 已然是5个月前的事情了 不禁感叹光阴荏苒其实就是我懒 几周前心血来潮想到用爬虫爬些东西 于是先后先重写了以前写过的求绩点代码 爬了草榴贴图,妹子图网,后来想爬婚恋网上的数据分析 结果在第一步模拟登陆就卡住了 于是改爬知乎 因为有现成代码参考。


1. 模拟登陆

1.1 查看post参数

我用的是Chrome浏览器 按F12打开开发者工具 选到NetWork 然后登陆一次观察在登陆过程中post了哪些参数
collect估计是用来收集要发送的数据 email用来post数据看一下email的post data:

email和password对应账号密码 captcha对应验证码 remember_me对应是否记住登陆状态


1.2 找到_xsrf

唯一有些奇怪的是出现了_xsrf 不过它不会凭空出现 于是我考虑是不是这是从客户端的源代码上得到的 所以返回登陆页面去寻找这个变量 果不其然 在源码里找到了这个变量的藏身之处

然后用可以很方便地用BeautifulSoup解析得到_xsrf

_xsrf = soup.find('input',{'type':'hidden','name':'_xsrf'})['value']

1.3 得到正确的验证码


在验证码图片上右键检查可以得到图片的url 发现有Query String'r'和'type' 每刷新一次r都会改变 猜测r是random 是随机生成的 在一次Session中随机生成一个整数去get验证码
生成url 然后下载到本地 手动输入验证码

r = s.get(captcha_url, params = {'r':random.random(),'type':'login'})
open('captcha.gif','wb').write(r.content)

然后生成post data 加上headers post到http://www.zhihu.com/login/email就行了 服务器会返回一个json格式的数据 若'r'为0则登陆成功 若为1 可以查看'msg'得到登陆失败的原因


2 爬取想要的数据

2.1 获取异步加载信息

登陆成功后 找到关注页面 发现只显示20个关注的人 接着向下滑动 又加载了20个 这里采用了异步加载需要得到异步操作返回的信息 然后和刚刚一样 查看NetWork的信息 选到XHR选项页


我总共关注了139人 分成7次异步加载 最后一次offset为139判断为结束 这些post数据的格式基本都一样只是offset标识每次加载关注人的起点 然后这里第一次出现了hash_id 大概是用来唯一标识用户的 所以再去搜索网页源码

有4个地方有这个源码,随便找一处解析出来就行了

def get_user_hash(text):
    soup = BeautifulSoup(text, 'html.parser')
    json_data = soup.find('script',{'class':'json-inline', 'data-name':'current_people'}).get_text().split('"')
    return json_data[7]

需要注意的是每个用户的user-hash是不同的 所以在不同用户的关注人页面需要重新解析一次user-hash

这里我用广度搜索的策略收集用户信息 以我为种子 得到我的关注者的id 然后再用他们的id得到他们的关注者 结束条件为记录用户数大于10,000

不过这个数似乎太大了 大概到4W多的时候已经有很多重复的了(添加失败) 而且有时广度搜索期间会卡住 我已经设置了全局socket的timeout为5s而且还没用到多线程 所以不知道为什么会卡住

代码仅仅是实现了功能 没有考虑代码的规范和异常处理 也没有注释 仅做分享 今后再解决卡住的问题和实现多线程

最后分享下代码 代码传送门

还有废话

大三下的日子过得百无聊赖且无限循环 每天的日程就是

if 有课
{
    滚去上课
}
else
{
    刷保研论坛
    背单词
    刷题
    搞技术
    玩游戏
}

发现还没好好学习马上就要期中考了 从明天开始就开始着手解决期中考这个主要矛盾 然后在循环循环 可能等到确认有高校要我之后才能专心看和学自己感兴趣的吧 期待那个时候

python模拟登陆知乎并爬取数据的更多相关文章

  1. python模拟登陆知乎

    ---恢复内容开始--- 在完成前面的阶段的任务之后,我们现在已经能够尝试着去模拟登录一些网站了.在这里我们模拟登录一下知乎做一下实验.笔者在这里总共用了三天多的时间,下面给大家分享一下笔者是怎么一步 ...

  2. python网络爬虫(6)爬取数据静态

    爬取静态数据并存储json import requests import chardet from bs4 import BeautifulSoup import json user_agent='M ...

  3. python通过token登录,并爬取数据实例

    from bs4 import BeautifulSoup import requests class Zabbix(object): def __init__(self, headers): sel ...

  4. Python 爬虫模拟登陆知乎

    在之前写过一篇使用python爬虫爬取电影天堂资源的博客,重点是如何解析页面和提高爬虫的效率.由于电影天堂上的资源获取权限是所有人都一样的,所以不需要进行登录验证操作,写完那篇文章后又花了些时间研究了 ...

  5. Python模拟登陆万能法-微博|知乎

    Python模拟登陆让不少人伤透脑筋,今天奉上一种万能登陆方法.你无须精通HTML,甚至也无须精通Python,但却能让你成功的进行模拟登陆.本文讲的是登陆所有网站的一种方法,并不局限于微博与知乎,仅 ...

  6. python模拟浏览器爬取数据

    爬虫新手大坑:爬取数据的时候一定要设置header伪装成浏览器!!!! 在爬取某财经网站数据时由于没有设置Header信息,直接被封掉了ip 后来设置了Accept.Connection.User-A ...

  7. Python模拟登陆新浪微博

    上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...

  8. Python模拟登陆TAPD

    因为在wiki中未找到需要的数据,查询也很迷,打算用python登录tapd抓取所需项目下的wiki数据,方便查找. 2018-9-30 19:12:44 几步走 模拟登录tapd 抓取wiki页左侧 ...

  9. Python分页爬取数据的分析

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 向右奔跑 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...

随机推荐

  1. Linux CentOS 7通过yum命令安装Mono4.0.1

    前言 上一篇中提到的快照方式安装Mono,该方式并不稳定,需要做各种配置,各种修改才能与jexus搭配运行. 一.安装源 rpm --import "http://keyserver.ubu ...

  2. dedecms后台验证码显示不正常的四种处理办法

    验证码不正确解决方法 分为两类解决方法 第一类:取消掉验证码,直接登录 第二类:修复验证码,回复验证码功能 四种常见的处理办法如下: 第一种:取消掉验证码具体方法如下 实现的方法一共分为两步来进行: ...

  3. Linux:history命令记录操作时间、操作用户、操作IP

    [步骤] 1./etc/profile文件中加入以下内容 2.执行:source /etc/profile [效果]

  4. linux病毒

    linux病毒查杀规范 一.病毒发现 1.ps -A.ps -ef.ps -aux查看是否有异常进程 2.last,lastlog命令可查看最近登录的帐户及时间 3.查看/var/log/messag ...

  5. PHP 7 的新特性

    PHP7是最新出来的一个新的PHP的一个版本,而且新增了一些新的版本特性,下面我们来介绍一下: 1.速度上比HHVM会快一些,大概是PHP5版本的9倍左右,下面是做的一个实验: <?php $a ...

  6. NFS服务器原理

    NFS服务器   port:2049      NFS 为 Network FileSystem 的简称,它的目的就是想让不同的机器.不同的操作系统可以彼此分享个别的档案啦!目前在 Unix Like ...

  7. XMl.02-约束

    DTD约束 DTD的书写位置 XML构建模块 DTD定义元素 DTD属性的定义 DTD实体的定义 schema约束 命名空间 schema约束的书写流程 XML被设计为一种很灵活的标记文档. 但是,有 ...

  8. 自动化前端构建工具--gulp

    Gulp是一个基于任务的javascript工程命令行流式构建工具.为什么要用Gulp呢?前端开发进入到工程化阶段,我们需要压缩合并文件,加MD5戳:如果使用 CoffeeScript/ES6 去代替 ...

  9. Chrome54安装最新版Flash版本办法

    从 Chrome54 版本开始,flash默认已经不能使用了.打开机器上的C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Pe ...

  10. hadoop环境搭建

    osubtu16.04(单机模式),存储空间25G,内存2G密码那啥(!!) 1:任务清单 参考书籍,(hadoop3权威指南) (环境(系统macos12,java18101 ,hadoop173, ...