手把手教你用Python网络爬虫获取头条所有好友信息

Irene181
• 阅读 1726

前言

大家好,我是黄伟。今日头条我发觉做的挺不错,啥都不好爬,出于好奇心的驱使,小编想获取到自己所有的头条好友,

看似简单,那么情况确实是这样吗,下面我们来看下吧。

项目目标

获取所有头条好友昵称

项目实践

编辑器:sublime text 3

浏览器:360浏览器,顺带一个头条号

实验步骤

1.登陆自己的头条号:

手把手教你用Python网络爬虫获取头条所有好友信息

可以看到2599,不知道谁会是下一个幸运观众了,哈哈哈哈哈,下面我们老样子,打开浏览器,因为我们是要获取到所有的好友啊,所以我们得先进入粉丝列表看看有哪些粉丝吧:

手把手教你用Python网络爬虫获取头条所有好友信息

然后右键--审查元素,来一波骚操作,定位粉丝的位置:

手把手教你用Python网络爬虫获取头条所有好友信息

接下来我们要做的就是获取粉丝的昵称,从上面的图可以看出我余下的粉丝都隐藏在ajax加载的动态页面中,如果我不进行滚动则看不到后面的粉丝,那怎么办呢?不过不要紧,遇到问题先不慌,淡定。

2.查找粉丝列表的接口

打开network:

手把手教你用Python网络爬虫获取头条所有好友信息

然后你会发现有很多get_info_list 中文译为获取信息列表,我想这应该很重要,打开一看:

手把手教你用Python网络爬虫获取头条所有好友信息

妈妈耶,这啥玩意,吓得我都不会说话了。

3.加载所有请求

于是只好满满滚动鼠标滚轮期待发现点什么,终于,功夫不负苦心人,终于让我滚到了有用的结果:

手把手教你用Python网络爬虫获取头条所有好友信息

于是我在看看它的头部信息,有重大发现:

手把手教你用Python网络爬虫获取头条所有好友信息

手把手教你用Python网络爬虫获取头条所有好友信息

4.找接口分析内容,转换Unicode

手把手教你用Python网络爬虫获取头条所有好友信息

可以看到用户的昵称使用Unicode码表示,所以我们需要将他们转换为中文,关于Unicode转中文,两种方法:

`ss='\u4e00\u8def\u5411\u897f8635'``print((ss.encode('utf8')).decode())``print(eval('u"%s"' % ss))`

没毛病,老铁。

手把手教你用Python网络爬虫获取头条所有好友信息

5.获取页面文件

那我们现在就要获取这个页面的所有结果啦:

手把手教你用Python网络爬虫获取头条所有好友信息

发现既然和结果不一样,这是什么骚操作,好吧,我服了。

6.对页面数据进行猜解

通过对上上个图的反复分析,我发现一个很重要的信息,那就是pagesize的值就等于当前页面所显示的粉丝的数量,那小编有2599个粉丝,那pagesize不就是2599吗?哈哈,说干就干:

手把手教你用Python网络爬虫获取头条所有好友信息

然后小编不断对页面的粉丝进行请求:

手把手教你用Python网络爬虫获取头条所有好友信息

手把手教你用Python网络爬虫获取头条所有好友信息

发现还是不行啊,跟我们想的背道而驰,在试试,发现最多只有200才行的通:

手把手教你用Python网络爬虫获取头条所有好友信息

其实这个情况下,已经捕捉到所有请求了,只是那些粉丝每28个粉丝分为一个请求,而且每个请求的时间戳不一,其实我们可以用三方软件来捕获这些请求响应然后将他们加入到程序中,我们好对他们进行一个请求分析,最后将他们保存为json格式的文件,然后我们获取到他们对应的值。

7.打印粉丝名称和响应正常的网址

我们还可以将所有请求中cursor最小的值和最大值拿出来分析,通过查找我找到,

cursor取值:1570591241~1589072863

这个信息很重要,接下来我们就可以依次对这些cursor构建请求了:

手把手教你用Python网络爬虫获取头条所有好友信息

我们将所有能成功请求的页面信息输入到1.txt 文件中去,然后我们在对1.txt中的网页内容逐个读取。然后我们获取他们的json文件保存下来,最后直接把他读取出来就ok啦。由于时间的关系,在此我只演示上图中出现的两百条信息,我们把它保存为json文件然后用json 模块进行读取:

手把手教你用Python网络爬虫获取头条所有好友信息

json是系统自带的模块,所以直接导入json模块并读取文件:

手把手教你用Python网络爬虫获取头条所有好友信息

终于全部打印出来啦,哈哈哈,然后我们就可以去获取我们自己关注了哪些人,如果有人把我们取消关注了,那么我们也相应取消对他们的关注。通过一段时间的爬取,终于爬的差不多了,不过我想应该没有爬完,因为网站有反爬:

手把手教你用Python网络爬虫获取头条所有好友信息

项目总结


通过对今日头条ajax和一些加密数据的一些情况使我认识到爬虫这条路真的很远,不学js逆向是不可能的。希望大家多多学习,学无止境的。

------------------- End -------------------

手把手教你用Python网络爬虫获取头条所有好友信息

往期精彩文章推荐:

手把手教你用Python网络爬虫获取头条所有好友信息

欢迎各位大佬点击链接加入群聊【helloworld开发者社区】:https://jq.qq.com/?_wv=1027&k=mBlk6nzX进群交流IT技术热点。

本文转自 https://mp.weixin.qq.com/s/4hg4KGPh79Q8PNO1KMI8Fw,如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Aimerl0 Aimerl0
3年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这