ZoneSpider开发 Day0

Day 0

Introduction

ZoneSpider是一个用于爬取你心仪的ta的空间的点赞人员名单,评论人员名单及其性别,并对此作出统计的爬虫,也算是我入门爬虫的入门作品吧。写这个的目的也很简单,之前说过给hxy的生日礼物再加上我也可以康康我心中的那个ta的情况2333333

Work

其实就是晚自习摸鱼做了一些准备工作,大概把qq空间结构摸清楚了。
先访问一个好友的空间,然后分析网站结构,发现获取说说信息是如下url:

URL:

https://user.qzone.qq.com/proxy/domain/ic2.qzone.qq.com/cgi-bin/feeds/feeds_html_act_all?uin=你自己的QQ号&hostuin=对方QQ号scope=0&filter=all&flag=1&refresh=0&firstGetGroup=0&mixnocache=0&scene=0&begintime=undefined&icServerTime=&start=起始说说编号&count=每次查询量(测试不超过20)&sidomain=qzonestyle.gtimg.cn&useutf8=1&outputhtmlfeed=1&refer=2&r=0.5998729011934181&g_tk=有个g_tk算法,可以网上搜一下,这里宇下面一样&qzonetoken=69d11c2150352f3ebe03201b95b12072c5ed4706f8c137d216ebfb6ffbc8170012204344af96abf8ceb0&g_tk=有个g_tk算法,可以网上搜一下

分析这个xhr,发现

data->friend_data->数字编号(0开始)->html

这里面包含了对应说说点赞人数,部分点赞人名单,以及所有评论,就是它了

关于那个g_tk值,我也大概摸清楚了。
在你发送的请求的header中,有个p_skey,每个p_skey对应一个g_tk值,g_tk值的算法如下(C++):

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int MAXN = 100010;
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}
#ifdef BEYONDSTARS
#define nc getchar
#endif
template <typename T>
inline void read(T &x){
    x = 0;T f = 1;
    char c = nc();
    while(c<'0'||c>'9'){if(c=='-')f = -1;c = nc();}
    while(c>='0'&&c<='9'){x = x*10+(c^48);c = nc();}
    x*=f;
}
char psk[200]="0略去部分,万一有什么秘密呢w_";//发送的请求里面的psk都是一样的
int main(){
    long long has = 5381;
    int len = strlen(psk);
    for(int i = 0;i<len;i++){
        has+=(has<<5)+psk[i];
    }
    long long hash = has&0x7fffffff;
    cout<<hash;
    return 0;
}

别因为我以前学OI残留的部分代码打我
至此,空间需要爬取的目标已确定,明天摸清cookie和ajax爬取

猜你喜欢

转载自www.cnblogs.com/BeyondStars/p/12380913.html
今日推荐