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系列之一> ...
随机推荐
- [JSOI2009]游戏 二分图博弈
题面 题面 题解 二分图博弈的模板题,只要会二分图博弈就可以做了,可以当做板子打. 根据二分图博弈,如果一个点x在某种方案中不属于最大匹配,那么这是一个先手必败点. 因为对方先手,因此我们就是要找这样 ...
- BZOJ 3786: 星系探索 解题报告
3786: 星系探索 Description 物理学家小C的研究正遇到某个瓶颈. 他正在研究的是一个星系,这个星系中有n个星球,其中有一个主星球(方便起见我们默认其为1号星球),其余的所有星球均有且仅 ...
- HDU.1556 Color the ball (线段树 区间更新 单点查询)
HDU.1556 Color the ball (线段树 区间更新 单点查询) 题意分析 注意一下pushdown 和 pushup 模板类的题还真不能自己套啊,手写一遍才行 代码总览 #includ ...
- ios错误码:NSError对象.code
1. URL Loading System Error Codes These values are returned as the error code property of an NSError ...
- 洛谷P1558 色板游戏
题目背景 阿宝上学了,今天老师拿来了一块很长的涂色板. 题目描述 色板长度为L,L是一个正整数,所以我们可以均匀地将它划分成L块1厘米长的小方格.并从左到右标记为1, 2, ... L.现在色板上只有 ...
- 个人最常用的vim操作
本文只记录个人工作中最常用到的vim快捷键,不是很全,但是已经覆盖了绝大多数功能. 参考:<鸟哥Linux私房菜>以及https://www.cnblogs.com/momofan/p/5 ...
- 嵌入式 视频编码(H264)hi3518
这几天在编写视频录制模块,所以,闲暇之余,又粗粗的整理了一下,主要是API,以备不时之用 摄像头获取的模拟信号通过经芯片处理(我们使用的是CX25825),将模拟信号转成数字信号,产生标准的IT ...
- 学习 C++的用途,(前辈总结)
C++准确说是一门中级语言,介于汇编和高级语言之间吧,要求程序员了解计算机的内部数据存储.个人认为,作为学生还是花功夫学C++,因为<设计模式><数据结构>这些课程基本上还是C ...
- Python学习笔记(三十一)正则表达式
---恢复内容开始--- 摘抄自:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 ...
- JAVA中反射机制五(JavaBean的内省与BeanUtils库)
内省(Introspector) 是Java 语言对JavaBean类属性.事件的一种缺省处理方法. JavaBean是一种特殊的类,主要用于传递数据信息,这种类中的方法主要用于访问私有的字段,且方法 ...