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

一、加代理

  爬取一个网站的时候,爬了不到一半,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. P1054 等价表达式

    题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的要求是判断选项中哪些代数 ...

  2. 520的信心赛——点点玩deeeep

                                   3.点点玩 deeeep(deeeep.cpp) 描述 点点最近迷上了 deeeep(此 de 非彼 de),在研究一个特殊的最长树链问题 ...

  3. After ZJOI2017 day2

    4.28早上6点左右就起了床,怀着紧张的心情,候到了7:45进考场 看到题,先0.5h看了看题意,yy一下,至少10+20+10. 首先是觉得T3可以搞一搞,先想到SA,很快就X掉了,思索一会儿,感觉 ...

  4. Python之旅:装饰器

    装饰器就是闭包函数的一种应用场景 一.为何要用装饰器 开放封闭原则:软件一旦上线后,就应该遵循开放封闭原则,即对修改源代码是封闭的,对功能的扩展是开放的 也就是说我们必须找到一种解决方案:能够在不修该 ...

  5. Matlab一个错误引发的血案:??? Error using ==> str2num Requires string or character array input.

    Matlab总遇到一些神奇的问题,让人摸不着头脑.昨天编写程序的时候遇到一个让我十分火大的问题,也是自己的matlab基础不好吧. 先描述一下问题,再GUI界面有个listbox,Tag属性是’lis ...

  6. Java设计模式の模版方法模式

    概述 模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的 ...

  7. 复制自身程序到windows目录和system32目录下

    功能:复制自身到windows目录和system32目录下. 参考代码: #include <stdio.h> #include <windows.h> void CopySe ...

  8. 重构改善既有代码设计--重构手法15:Remove Middle Man (移除中间人)

    某个类做了过多的简单委托动作.让客户直接调用受托类. 动机:在Hide Delegate (隐藏委托关系)的“动机”中,谈到了“封装委托对象”的好处.但是这层封装也是要付出代价的,它的代价是:每当客户 ...

  9. 【IDEA】 Can't Update No tracked branch configured for branch master or the branch doesn't exist. To make your branch track a remote branch call, for example, git branch --set-upstream-to origin/master

    IDEA点击GIT更新按钮时,报错如下: Can't UpdateNo tracked branch configured for branch master or the branch doesn' ...

  10. 【BZOJ4237】稻草人 [分治][单调栈]

    稻草人 Time Limit: 40 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description JOI村有一片荒地,上面竖着N个稻草 ...