参考链接 Tag: 爬虫
网络爬虫抓取数据一般有两种难度,一种是指对方数据内容有加密的,一般APP软件的数据内容都有加密,这时候就需要逆向解析app数据了。第二种就是,必须登录后才能抓取到数据,就登录后目标网站也会限制IP的访问次数。
对于需要登录采集抓取数据的APP,我们可以指定正确的抓取策略来完成采集工作。
就比如如何抓取脉脉APP:
1、抓取目标,抓取脉脉APP上的职业信息
2、了解脉脉如何使用和分析脉脉APP的产品形态(PC端和APP需要登录才能采集)
3、分析APP对访问的频率控制,可以进行手动测试,登录账号后快速访问页面,访问多次后,就有提示频繁访问,这时候就需要统计下访问了多少次后才会出现频繁。
4、对于脉脉需要大量账号登陆才能抓取的APP,一个账号频繁更换IP抓取也会出问题
5、分析脉脉的分享功能,通过分析功能分析出,我们可以把个人的详细页面分析到微信里,通过微信 打开,就不需要登陆了,通过分享微信后,爬虫抓包后会返回一个URL,URL链接就不需要登陆,这个这个URL链接对访问的次数频率不是很严格。
总结:登陆脉脉,指定抓取目标,解决登陆问题,分享抓取的目标详细信息分析到微信里,返回URL链接,访问URL链接获取数据信息。解决登陆问题后只需要大量的爬虫代理IP就可以成功抓取到数据。具体可以参考以下代码,仅供参考:
import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Demo {
public static void main(String[] args) {
try{
// 代理服务器(产品官网 www.16yun.cn)
final static String ProxyHost = "t.16yun.cn";
final static String ProxyPort = "31111";
System.setProperty("http.proxyHost", ProxyHost);
System.setProperty("https.proxyHost", ProxyHost);
System.setProperty("http.proxyPort", ProxyPort);
System.setProperty("https.proxyPort", ProxyPort);
// 代理验证信息
final static String ProxyUser = "username";
final static String ProxyPass = "password";
System.setProperty("http.proxyUser", ProxyUser);
System.setProperty("http.proxyPassword", ProxyPass);
System.setProperty("https.proxyUser", ProxyUser);
System.setProperty("https.proxyPassword", ProxyPass);
// 设置IP切换头
final static String ProxyHeadKey = "Proxy-Tunnel";
// 设置Proxy-Tunnel
Random random = new Random();
int tunnel = random.nextInt(10000);
String ProxyHeadVal = String.valueOf(tunnel);
// 处理异常、其他参数
Document doc = Jsoup.connect(url).timeout(3000).header(ProxyHeadKey, ProxyHeadVal).get();
if(doc != null) {
System.out.println(doc.body().html());
}
}catch (IOException e)
{
e.printStackTrace();
}
}
}