爬取用户
某天,我发现我的文章被某个用户点赞了。欣喜之下,把那边文章重新校核更改一遍,接着进入这个点赞我的用户看看,结果发现他近期的博客是一些爬虫的实战。我想,我那篇文章,应该是他做的一个小程序批量加载用户信息并给文章点赞。我觉得这是一个有点意思的事,于是用java实现csdn批量爬取用户名并点赞。其中批量爬取用户名的思路借鉴这位大神的这篇博文GO+Selenium批量关注优快云 1 (如何获取100万用户名, ES去重)。
题外话到此为止,先说说怎么获得csdn的用户名的,他的方法是通过用户的粉丝和关注两个列表,最多可以获得12个用户名,再根据这12个用户名,继续进入每个用户的主页,获得该用户的粉丝和关注列表的用户数据,这样无限循环往复,直到找到很多很多的用户名。
1.通过https://me.youkuaiyun.com/用户名
获得粉丝和关注列表。
2.查看页面源码,用正则匹配
<a class="fans_title" href="https://me.youkuaiyun.com/qq_33981796">qq_33981796</a>
匹配正则
a class="fans_title" href="https://me.youkuaiyun.com/(.+)"
3.获得匹配的用户名,再次进入https://me.youkuaiyun.com/用户名
页面,重复1,2的操作
代码
public Set<String> users = new HashSet<>();
public void get优快云Users(String userName) {
if (users.size() > 30) {
return;
}
Set<String> userList = parseFans(mePage(userName));
if (userList != null && userList.size() > 0) {
synchronized (users) {
users.addAll(userList);
}
userList.stream().forEach(user -> get优快云Users(user, token));
}
}
public String mePage(String username) {
String follerUrl = "https://me.youkuaiyun.com/" + username;
try {
Map<String, String> headers = new HashMap<>();
headers.put("cook", "UserName=luo4105; UserInfo=de5e709f7cd84e2d87648d45e6288db0; " +
"UserToken=de5e709f7cd84e2d87648d45e6288db0;");
InputStream inputStream = HttpUtil.doGet(follerUrl, headers);
String response = StreamUtil.inputStreamToString(in