Java可以像Python一样方便爬去世间万物
程序员文章站
2023-04-05 22:06:14
前言: 之前在大二的时候,接触到了Python语言,主要是接触Python爬虫那一块 比如我们常用的requests,re,beautifulsoup库等等 当时为了清理数据和效率,还专门学了正则表达式,异常的佩服自己哈哈哈哈哈 最近闲着无事干,秉承是Java是世界上最好的语言,Python能干,为 ......
前言:
- 之前在大二的时候,接触到了python语言,主要是接触python爬虫那一块
- 比如我们常用的requests,re,beautifulsoup库等等
- 当时为了清理数据和效率,还专门学了正则表达式,异常的佩服自己哈哈哈哈哈
- 最近闲着无事干,秉承是java是世界上最好的语言,python能干,为啥java不行
- 说刚就刚,以下以两个小例子还说明java做爬虫一样可以像python哪样方便
技术:
- springboot
- httpclient
- jsoup
- httpclientutil
- 等
贴吧一键签到:
- 我们要知道,不管是你访问一个页面,还是登录注册
- 本质就是发送http请求
- http请求大致有四种
- get
- post
- delete
- put
- 我们常用的也就是两种get请求获取页面资源
- post请求发送数据
- 所以我们的思路如下:
- 向某个url发送get请求,获取html页面
- 用正则或者第三方工具清理数据
- 获得数据以后在进行后续操作
- 比如在get请求
- 或者直接存到数据库中怎么样的
1. 获取html页面:
1 public void execute(string username) { 2 // 获取cookie 3 string cookie = getcookie(username); 4 // 获取首页html内容 5 string content = http.get("http://tieba.baidu.com/mo/", cookie); 6 // 获取所有连接 7 string links = getmore(content); 8 links = "http://tieba.baidu.com" + links; 9 // 获取所有贴吧html内容 10 content = http.get(links, cookie); 11 list<string> likeslink = getlike(content); 12 sign(likeslink, cookie, username); 13 }
我们用第三方工具包 httpclientutil 可以直接发送get请求(已经封装好的)
2.清理数据:
1 private void sign(list<string> likeslink, string cookie, string username) { 2 for (string link : likeslink) { 3 string content = http.get(link, cookie); 4 document doc = jsoup.parse(content); 5 elements titles = doc.getelementsbyclass("bc"); 6 string title = titles.get(0).text(); 7 title = title.split("吧")[0]; 8 elements links = doc.select("a[href]"); 9 boolean flag = true; 10 for (element ele : links) { 11 string ss = ele.attr("href"); 12 ss = "http://tieba.baidu.com" + ss; 13 if (ss.contains("sign")) { 14 http.get(ss, cookie); 15 // 插入到数据库中 16 string date = new simpledateformat("yyyy-mm-dd hh:mm:ss.sss").format(new date()); 17 dao.insertrecord(username, title, date, "签到成功"); 18 flag = false; 19 break; 20 } 21 } 22 if (flag) { 23 // 插入到数据库中 24 string date = new simpledateformat("yyyy-mm-dd hh:mm:ss.sss").format(new date()); 25 dao.insertrecord(username, title, date, "已签到"); 26 } 27 } 28 }
我们这里用的第三方工具 jsoup, jsoup可以像dom一样简单的获取任何东西。甚至你可以用这个则来进行获取。
项目源码:贴吧一键签到
项目地址:
爬取天涯房价的帖子:
1. 获取html地址:
1 public list<string> getcontent() { 2 3 list<string> res = new arraylist<>(); 4 // 92是固定的,帖子的总数 5 for (int i = 1; i <= 92; i++) { 6 string url = geturl(i); 7 string content = http.get(url); 8 getparse(content, res); 9 } 10 return res; 11 }
2.清理数据:
1 private void getparse(string content, list<string> res) { 2 3 document doc = jsoup.parse(content); 4 elements links = doc.getelementsbyclass("bd"); 5 for (element link : links) { 6 string str = link.tostring(); 7 pattern pattern = pattern.compile("<p>[.\\s\\s]+?div"); 8 matcher m = pattern.matcher(str); 9 while (m.find()) { 10 string s = m.group(); 11 s = s.replaceall("<", ""); 12 s = s.replaceall(">", ""); 13 s = s.replaceall("/", ""); 14 s = s.replaceall("p", ""); 15 s = s.replaceall("div", ""); 16 s = s.replaceall("\n", ""); 17 res.add(s); 18 } 19 } 20 }
项目源码:
总结:
用java做爬虫,无非两点
- 获取html
- 清理页面
当我们这两点都会的时候,那么就十分的简单了。当然这里也用到了第三方的开源jar包
- 获取html => httpclient
- 清理数据 => jsoup
ps. 如果你对爬虫也感兴趣,我之前写过一个爬知乎图片的爬虫 前方高能
可以自己爬下来,慢慢欣赏,不用谢我