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系列之一> ...
随机推荐
- [COGS1000]伊吹萃香 最短路
1000. [東方S2] 伊吹萃香 输入文件:suika.in 输出文件:suika.out 简单对比 时间限制:1 s 内存限制:128 MB Problem 4 伊吹萃香(suika. ...
- 【省选水题集Day1】一起来AK水题吧! 题解(更新到B)
题目:http://www.cnblogs.com/ljc20020730/p/6937936.html 水题A:[AHOI2001]质数和分解 安徽省选OI原题!简单Dp. 一看就是完全背包求方案数 ...
- Zookeeper(三) Zookeeper原理与应用
一.zookeeper原理解析 1.进群角色描述 2.Paxos 算法概述( ZAB 协议) 分布式一致性算法 3.Zookeeper 的选主(恢复模式) 以一个简单的例子来说明整个选举的过程. ...
- day4-python基础
- Git入门指南
git学习资源: Pro Git(中文版) Learn Git in your browser for free with Try Git. Git常用命令 Reference 常用 Git 命令清单 ...
- 洛谷P1991 无线通讯网
P1991 无线通讯网 170通过 539提交 题目提供者洛谷OnlineJudge 标签图论 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 怎么又炸了 为啥一直40!求解! UKE:inv ...
- Linux上调试core文件(Good)
coredump文件 什么是coredump? 通常情况下coredmp包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息等.可以理解为把程序工作的当前状态存储成一个文件.许多程序和操作系统出 ...
- [实战篇]Tomcat发布项目-虚拟目录
在二阶段学习的过程中,我一直使用MyEclipse的方式把工作空间的项目发布到webapps目录下,这种方式自我感觉在实际开发中应用能在70%左右,但是如何涉及到一些上传操作等操作, 从新发布项目之后 ...
- nova-api源码分析(APP中用到的开源库)
源码版本:H版 1.paste.deploy 参考文章: http://pythonpaste.org/deploy/ http://blog.csdn.net/xiangmin2587/articl ...
- python---爬虫相关性能(各个异步模块的使用,和自定义异步IO模块)
一:线程池,进程池等相关文章了解 python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用) python---基础知识回顾(十)进程和线程(协程gevent:线程在 ...