Webcollector应用(二)
先吐槽一句哀家的人品,总在写好代码之后,网站默默的升级,没有一点点防备...
一、加代理
爬取一个网站的时候,爬了不到一半,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应用(二)的更多相关文章
- 搜索引擎爬虫技术研究(爬虫框架)-WebCollector
一.简介: https://github.com/CrawlScript/WebCollector/blob/master/README.zh-cn.md 二.使用: <dependency&g ...
- JAVA爬虫 WebCollector
JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...
- 用WebCollector制作一个爬取《知乎》并进行问题精准抽取的爬虫(JAVA)
简单介绍: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API.仅仅需少量代码就可以实现一个功能强大的爬虫. 怎样将WebCollector导入项目请 ...
- 使用webcollector爬虫技术获取网易云音乐全部歌曲
最近在知乎上看到一个话题,说使用爬虫技术获取网易云音乐上的歌曲,甚至还包括付费的歌曲,哥瞬间心动了,这年头,好听的流行音乐或者经典老歌都开始收费了,只能听不能下载,着实很郁闷,现在机会来了,于是开始研 ...
- Webcollector应用(一)
webcollector是一个开源的Java网络爬虫框架.最近的爬虫改用java写了,对这一周的工作进行简要总结.对于内部机制了解不深入,主要侧重在应用. 一.环境搭建 需要安装一个webcollec ...
- 基于Java的开源爬虫框架WebCollector的使用
一.WebCollector介绍 WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. WebCollecto ...
- 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态
最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...
- 前端开发中SEO的十二条总结
一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...
- 【疯狂造轮子-iOS】JSON转Model系列之二
[疯狂造轮子-iOS]JSON转Model系列之二 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇<[疯狂造轮子-iOS]JSON转Model系列之一> ...
随机推荐
- [HNOI2006]最短母串问题 AC自动机
题面:洛谷 题解: 如果我们对这些小串建出AC自动机,那么我们所求的大串就是要求满足遍历过所有AC自动机上的叶子节点,且经过步数最少的串.如果有多个步数相同的串,要输出字典序最小的串. 在AC自动机上 ...
- 【BZOJ1923】外星千足虫(线性基)
[BZOJ1923]外星千足虫(线性基) 题面 BZOJ 洛谷 Description Input 第一行是两个正整数 N, M. 接下来 M行,按顺序给出 Charles 这M次使用"点足 ...
- BZOJ1187:[HNOI2007]神奇游乐园——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1187 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现 ...
- BZOJ4152:[AMPPZ2014]The Captain——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4152 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1 ...
- bzoj 1879 状压dp
879: [Sdoi2009]Bill的挑战 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 852 Solved: 435[Submit][Status ...
- 修改Docker默认镜像和容器的存储位置
一.Why Docker默认的镜像和容器存储位置在/var/lib/docker中,如果仅仅是做测试,我们可能没有必要修改,但是当大量使用的时候,我们可能就要默认存储的位置了. 二.How 2.1 修 ...
- 持久化的基于L2正则化和平均滑动模型的MNIST手写数字识别模型
持久化的基于L2正则化和平均滑动模型的MNIST手写数字识别模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献Tensorflow实战Google深度学习框架 实验平台: Tens ...
- redis服务启动脚本
/etc/rc.d/init.d/redis #!/bin/sh# chkconfig: 2345 80 90 # description: Start and Stop redis REDISPOR ...
- [SDOI2005]区间
题目描述 现给定n个闭区间[ai, bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排列 ...
- 使用JavaScript实现使用鼠标画线的效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...