基于Jsoup爬取Facebook群组成员信息
我们知道,类似今日头条、UC头条这类的App,其内容绝大部分是来源于爬虫抓取。我们可以使用很多语言来实现爬虫,C/C++、Java、Python、PHP、NodeJS等,常用的框架也有很多,像Python的Scrapy、NodeJS的cheerio、Java的Jsoup等等。本文将演示如何通过Jsoup实现Facebook模拟登录,爬取特定群组的成员信息,并导出Excel。
Keywords: Netbeans, JSwing, Jsoup, Apache POI , Jackson
Source Code: FacebookGrabber
1. Facebook模拟登录
想要爬取Facebook上面的群组成员信息,第一步需要先进行登录,并将登录成功后的cookie保存,之后每次请求的headers中都要带上该cookie用于用户识别。
访问https://www.facebook.com/login 通过chrome检查html元素可以看到:
知道对应的登录url以及请求参数之后,现在我们通过Jsoup来构造登录请求以获取用户cookie信息。
这里,我写了一个基类,方便请求调用的同时,自动将每次请求获取到的cookie保存并附带到下一次的请求当中:
private Connection getConnection(String url) {
return Jsoup.connect(url)
.timeout(TIMEOUT_CONNECTION)
.userAgent(userAgent)
.followRedirects(true)
.ignoreContentType(true);
}
protected Document requestDocument(String url, String httpMethod, Map<String, String> data) throws Exception {
Connection connection = getConnection(url);
if (data != null && data.size() > 0) {
connection.data(data);
}
if (cookies != null) {
connection.cookies(cookies);
}
Document resultDocument = HTTP_POST.equalsIgnoreCase(httpMethod) ? connection.post() : connection.get();
return resultDocument;
}
protected Response requestBody(String url, String httpMethod, Map<String, String> data) throws Exception {
Connection conne