先吐槽一句哀家的人品,总在写好代码之后,网站默默的升级,没有一点点防备...

一、加代理

  爬取一个网站的时候,爬了不到一半,IP被封了,整个内部局域网的所有电脑都不能访问网站了。

 public class CrawlTong  extends DeepCrawler{
JdbcTemplate jdbcTemplate = JDBCBase.getInstance().getTemplete2();
protected HttpRequesterImpl requester=(HttpRequesterImpl)this.getHttpRequester();//③
public final static String name = "name";
public final static String password = "password";
public final static String headerKey = "Proxy-Authorization";
public final static String headerValue = "Basic " + Base64.encode((name + ":" + password).getBytes());
public final static int port = 50000;
public final static String[] proxys = {
"***.***.***.***",
"***.***.***.***",
"***.***.***.***"};
public CrawlTong(String crawlPath ,int useProxy){ // ①
super(crawlPath);
if(useProxy == 1) {
requester.setHeader(ProxyCollector.headerKey, ProxyCollector.headerValue);//④
//多代理随机
RandomProxyGenerator proxyGenerator = new RandomProxyGenerator(); // ⑤
for (String proxy : proxys) {
proxyGenerator.addProxy(proxy,port); // ⑥
}
requester.setProxyGenerator(proxyGenerator); // ⑧
}
}
public static void main(String[] args) throws Exception{
CrawlTong crawler = new CrawlTong("/tong",1); // ②
crawler.addSeed("https://www.tzg.cn/");
crawler.start(1);
}
}

  还是以应用(一)中的代码为例,可以在构造函数中添加代理:

  ① 在原来的基础添加了一个int型的useProxy参数,如果为1则用代理,不想用可以设置其他值

  ② 主函数中调用

  ③ 得到当前的请求requester,HttpRequesterImpl类型

  ④ 设置请求的Header信息,key值是"Proxy-Authorization",value值是以代理服务器的用户名和密码构成的字符串

  ⑤ 创建一个RandomProxyGenerator类型的对象proxyGenerator,这个类是Webcollector提供的,可以随机切换代理

  ⑥  把事先定义好的代理服务器IP和端口依次放入到代理生成器中

  ⑧ 调用requster的setProxyGenerator方法,代理生成器传进去

  为虾米没有圈7呢,因为我打不出来........

  在我写这篇blog的时候,又一件积攒人品的事情发生了,哈哈哈,我这些代理服务器也被封了呢......

  要考虑增加些sleep了......

二、解析json

  很多页面将数据存储到单独的json文件中,所以要拿到数据,就需要对其进行解析。

  解析json本身与Webcollector没什么多大关系,用java自己的方法。  

   public Links visitAndGetNextLinks(Page page) {
String jsonStr = page.getHtml();
JSONObject json = null;
json = new JSONObject(jsonStr);
System.out.println(jsonStr); //①
System.out.println(json); //②
JSONObject msg=json.getJSONObject("msg"); //③
System.out.println(msg);
int total = msg.getInt("total");
JSONArray projectData = msg.getJSONArray("projectData"); //④
System.out.println(total);
System.out.println(projectData);
for(int i = 0 ;i<projectData.length();i++){ // ⑤
JSONObject object = projectData.getJSONObject(i);
dataModel = new DataModel();
dataModel.setNumber(object.getString("thousandearnings"));
dataModel.setFlag(object.getInt("remain_percent"));
System.out.println(object.getString("thousandearnings"));
System.out.println(object.getInt("remain_percent"));
}
return null;
}

  需要引入需要的包 import org.json.JSONArray; import org.json.JSONObject;....

  ① 和 ② 打印出来看似没有什么区别,但是呢一个是String类型,一个是Json类型,可以调用的方法不一样。

  ③ 通过getJSONObject方法获取JSONObject对象

  JSONObject类型:json串,最外层大括号

  {"A":"aaa","B":"bbb","C":[{"C1":"c1c1c1","C2":"c2c2c2"},{"CC1":"cc1cc1cc1","CC2":"cc2cc2cc2"}]}

  ④ 通过getJSONArray方法获取JSONArray对象

  JSONArray类型: 最外层是[],里面包含json串

  [{"C1":"c1c1c1","C2":"c2c2c2"},{"CC1":"cc1cc1cc1","CC2":"cc2cc2cc2"}]

  ⑤ 遍历JSONArray

  总之:value值是什么类型的,就调用json相对应的方法获取即可

Webcollector应用(二)的更多相关文章

  1. 搜索引擎爬虫技术研究(爬虫框架)-WebCollector

    一.简介: https://github.com/CrawlScript/WebCollector/blob/master/README.zh-cn.md 二.使用: <dependency&g ...

  2. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  3. 用WebCollector制作一个爬取《知乎》并进行问题精准抽取的爬虫(JAVA)

    简单介绍: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API.仅仅需少量代码就可以实现一个功能强大的爬虫. 怎样将WebCollector导入项目请 ...

  4. 使用webcollector爬虫技术获取网易云音乐全部歌曲

    最近在知乎上看到一个话题,说使用爬虫技术获取网易云音乐上的歌曲,甚至还包括付费的歌曲,哥瞬间心动了,这年头,好听的流行音乐或者经典老歌都开始收费了,只能听不能下载,着实很郁闷,现在机会来了,于是开始研 ...

  5. Webcollector应用(一)

    webcollector是一个开源的Java网络爬虫框架.最近的爬虫改用java写了,对这一周的工作进行简要总结.对于内部机制了解不深入,主要侧重在应用. 一.环境搭建 需要安装一个webcollec ...

  6. 基于Java的开源爬虫框架WebCollector的使用

    一.WebCollector介绍 WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. WebCollecto ...

  7. 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态

    最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...

  8. 前端开发中SEO的十二条总结

    一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...

  9. 【疯狂造轮子-iOS】JSON转Model系列之二

    [疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...

随机推荐

  1. Exception异常 自定义异常

    public class Exception extends Throwable Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件. public ...

  2. HN2018省队集训

    HN2018省队集训 Day1 今天的题目来自于雅礼的高二学长\(dy0607\). 压缩包下载 密码: 27n7 流水账 震惊!穿着该校校服竟然在四大名校畅通无阻?霸主地位已定? \(7:10\)从 ...

  3. powershell网络钓鱼获取用户密码

    1.powershell网络钓鱼脚本: https://raw.githubusercontent.com/enigma0x3/Invoke-LoginPrompt/master/Invoke-Log ...

  4. 日志分割工具——cronolog

    使用cronolog可以格式化日志文件的格式,比如按时间分割,易于管理和分析. 1.下载软件 http://cronolog.org/download/index.html 用法见 lighttpd配 ...

  5. poj1284 Primitive Roots

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4775   Accepted: 2827 D ...

  6. laravel调试神器tinker

    一直以来,想调试框架中的某些东西,如想知道 Elpquent 的 create 方法返回值是个什么东西, 以前的话,应该就是在 create 方法调用之后,使用 dd 或者 var_dump 之类的函 ...

  7. vim切换显示器乱行问题解决

    http://note.youdao.com/noteshare?id=ccdad950ca154a6b1597cbe2ede07b81

  8. Python基础之面向对象(进阶篇)

    面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实 ...

  9. pthread在Qt+Windows下的使用

    pthread是牛逼的跨平台线程库,无需多介绍. 下载pthread-win32,解压后将x86里的pthreadVC2.dll放到system32目录里,将pthreadVC2.lib放入项目中去, ...

  10. Intellj IDEA使用技巧记录

    ▲.Intellj IDEA光标变成了insert光标状态 且不能编辑操作: https://blog.csdn.net/aosica321/article/details/52787418 ▲.在i ...