c httpclient抓取网页(服务器判定你是ie还是chrome还是firefox?分析的请求地址)
优采云 发布时间: 2021-12-28 00:20c httpclient抓取网页(服务器判定你是ie还是chrome还是firefox?分析的请求地址)
HttpClient 是 Apache Jakarta Common 的一个子项目,可用于提供支持 HTTP 协议的高效、最新且功能丰富的客户端编程工具包,它支持 HTTP 协议的最新版本和推荐。
3.上一页
首先模拟手机浏览器的UA。就是让我们打开的页面回到移动端的页面效果,那我们该怎么做呢?其实服务器是根据请求头中的UA来判断你是chrome还是firefox的,所以我们来找一个手机浏览器的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");
就可以了,然后我们就可以使用jsoup来获取我们想要的元素了。jsoup 的语法与 jq 相同。
我们直接面对页面,右键我们想要的元素,选中review元素,然后用jq选择器选中它。
你可以参考jQuery选择器
4.获得关注者
直接获取我们之前分析的请求地址
https://www.zhihu.com/api/v4/members/Sweets07/followers?per_page=10&
include=data%5B%2A%5D.employments%2Ccover_url%2Callow_message%2Canswer_coun
t%2Carticles_count%2Cfavorite_count%2Cfollower_count%2Cgender%2Cis_followe
d%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
}
]
}
这个数据包括下一个请求地址,最后一个请求地址,时间是开始,时间是结束,总共有多少粉丝,以及关注者的基本信息,
所以我们可以在一段时间内得到所有的粉丝:
过程:
第一次获取数据,获取is_end字段判断is_end是否为真,根据is_end判断是否继续循环。如果循环,更新 is_end 并更新下一个连接请求
一套后,你可以得到一个用户的所有粉丝。
我爱Java(QQ群):170936712(点击加入)