博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知乎爬虫之4:抓取页面数据
阅读量:5276 次
发布时间:2019-06-14

本文共 2800 字,大约阅读时间需要 9 分钟。

git爬虫项目地址( 终于上传代码了~~~~关注和star在哪里):(已完结)

附赠之前爬取的数据一份(mysql): 链接:只下载不点赞,不star,差评差评~蓝瘦香菇)

本文由博主原创,转载请注明出处:

咱们,那么咱们这篇就来研究下如何拿利用Jsoup到咱们想要的数据。

那么咱们说下,首先请求关注者和粉丝者是pcweb版本的,但是获取页面的是手机页面的。
好,正题:

1.什么是Jsoup

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

2. HttpClient请求模拟

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

3.走起页面

首先模拟手机浏览器的UA。就是让咱们打开的页面返回的是移动端的页面效果,那么最应该怎么怎么做呢?其实服务器判定你是ie还是chrome还是firefox是根据请求头里面的UA实现的,因此咱们要找一个手机浏览器的UA。。

咱们可以某度一下或者直接在浏览器里面直接f12,模拟移动端,然后看请求参数:

User-Agent:Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36

妥妥的没问题:

那咱们如何将这句体现到程序里面呢?

简单,在咱们拿到get对象后直接设置:

httpGet.setHeader("User-Agent", "Mozilla/5.0         (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36         (KHTML, like Gecko) Chrome/46.0.2490.76 Mobile Safari/537.36");

就ok了,然后咱们就可以用jsoup来拿咱们想要的元素了,jsoup的语法和jq如出一辙。

咱们直接对着页面,右击咱们想要的元素,选择审查元素,然后用jq的选择器选出来就好了。
可以参考

4.拿到关注者

直接get咱们之前分析的请求地址

https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&include=data%5B%2A%5D.employments%2Ccover_url%2Callow_message%2Canswer_count%2Carticles_count%2Cfavorite_count%2Cfollower_count%2Cgender%2Cis_followed%2Cmessage_thread_token%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=10&offset=30

不过要记得替换用户名字和在请求头里加入cookie的最后一段zc_0

然后请求数据返回的是json

{  "paging": {    "is_end": false,    "next": "https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&include=data%5B%2A%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=10&offset=20",    "previous": "https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&include=data%5B%2A%5D.answer_count%2Carticles_count%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F%28type%3Dbest_answerer%29%5D.topics&limit=10&offset=0",    "is_start": false,    "totals": 398  },  "data": [    {      "is_followed": true,      "avatar_url_template": "https://pic1.zhimg.com/da8e974dc_{size}.jpg",      "name": "陈晓峰",      "url": "",      "type": "people",      "user_type": "people",      "answer_count": 0,      "url_token": "chen-xiao-feng-84",      "headline": "阿里巴巴,分布式数据库,",      "avatar_url": "https://pic1.zhimg.com/da8e974dc_is.jpg",      "is_following": false,      "is_org": false,      "follower_count": 14,      "badge": [],      "id": "ff02ea0544901a9ddfcb7ba60c73b673",      "articles_count": 0    }  ]}

这个数据包括了下次请求地址,上次请求地址,时候是开始,时候是结束,共有多少粉丝,关注人基本信息,

因此咱们可以在一个while里来获得所有粉丝数:
流程:

  1. 第一次获取数据
  2. 获取is_end字段
  3. 判断is_end时候为true
  4. 根据is_end判断是否继续循环
  5. 如果循环,更新is_end,更新下次请求连接

一套下来,就能拿到一个用户的所有粉丝了。

吾爱Java(QQ群):

转载于:https://www.cnblogs.com/seven007/p/6248552.html

你可能感兴趣的文章
vc6.0转vs2005中字符串的问题
查看>>
ActiveReports中如何在后台导出运行时绑定数据源报表
查看>>
CSS3渐变色彩
查看>>
10774: matrix
查看>>
linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程...
查看>>
【极光推送】给指定用户发送消息
查看>>
Python——函数 8、可变长参数
查看>>
python下 help()使用方法
查看>>
nginx服务器
查看>>
操作系统相关知识
查看>>
前端之css笔记3
查看>>
将cocos2dx项目从VS移植到Eclipse
查看>>
cpu地址空间
查看>>
神经网络入门连载
查看>>
C#中的文本乱码问题
查看>>
jquery学习之1.20-获取同辈元素和子元素
查看>>
Letters Removing CodeForces - 899F (线段树维护序列)
查看>>
2019牛客多校一 D. Parity of Tuples
查看>>
MySQL创建用户与授权方法
查看>>
硬盘无法引导怎么办
查看>>