前言:

  • 之前在大二的时候,接触到了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页面:

 public void execute(String username) {
// 获取cookie
String cookie = getCookie(username);
// 获取首页html内容
String content = http.get("http://tieba.baidu.com/mo/", cookie);
// 获取所有连接
String links = getMore(content);
links = "http://tieba.baidu.com" + links;
// 获取所有贴吧html内容
content = http.get(links, cookie);
List<String> likesLink = getLike(content);
sign(likesLink, cookie, username);
}

  我们用第三方工具包 HttpClientUtil 可以直接发送Get请求(已经封装好的)

    2.清理数据:

 private void sign(List<String> likesLink, String cookie, String username) {
for (String link : likesLink) {
String content = http.get(link, cookie);
Document doc = Jsoup.parse(content);
Elements titles = doc.getElementsByClass("bc");
String title = titles.get(0).text();
title = title.split("吧")[0];
Elements links = doc.select("a[href]");
boolean flag = true;
for (Element ele : links) {
String ss = ele.attr("href");
ss = "http://tieba.baidu.com" + ss;
if (ss.contains("sign")) {
http.get(ss, cookie);
// 插入到数据库中
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
dao.insertRecord(username, title, date, "签到成功");
flag = false;
break;
}
}
if (flag) {
// 插入到数据库中
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date());
dao.insertRecord(username, title, date, "已签到");
}
}
}

  我们这里用的第三方工具 Jsoup, Jsoup可以像DOM一样简单的获取任何东西。甚至你可以用这个则来进行获取。

  项目源码:贴吧一键签到

  项目地址:贴吧一键签到

爬取天涯房价的帖子:

  1. 获取HTML地址:

 public List<String> getContent() {

         List<String> res = new ArrayList<>();
// 92是固定的,帖子的总数
for (int i = 1; i <= 92; i++) {
String url = getUrl(i);
String content = http.get(url);
getParse(content, res);
}
return res;
}

  2.清理数据:

 private void getParse(String content, List<String> res) {

         Document doc = Jsoup.parse(content);
Elements links = doc.getElementsByClass("bd");
for (Element link : links) {
String str = link.toString();
Pattern pattern = Pattern.compile("<p>[.\\s\\S]+?div");
Matcher m = pattern.matcher(str);
while (m.find()) {
String s = m.group();
s = s.replaceAll("<", "");
s = s.replaceAll(">", "");
s = s.replaceAll("/", "");
s = s.replaceAll("p", "");
s = s.replaceAll("div", "");
s = s.replaceAll("\n", "");
res.add(s);
}
}
}

  项目源码:天涯社区帖子

总结:

  用Java做爬虫,无非两点

  • 获取HTML
  • 清理页面

  当我们这两点都会的时候,那么就十分的简单了。当然这里也用到了第三方的开源jar包

  • 获取HTML   =>  HttpClient
  • 清理数据      =>  Jsoup

  

ps.  如果你对爬虫也感兴趣,我之前写过一个爬知乎图片的爬虫  前方高能

  

  女生们被关注腿是什么感受?

  做一个可爱的女孩子是一种什么体验?

   怎样搭配才能显得腿长?

   平常人可以漂亮到什么程度?

  可以自己爬下来,慢慢欣赏,不用谢我 

Java可以像Python一样方便爬去世间万物的更多相关文章

  1. Java基础-爬虫实战之爬去校花网网站内容

    Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...

  2. Python 2.7 爬取51job 全国java岗位

      一页有50条数据一共2000页 分页是get分页 #!/usr/bin/python # encoding: utf-8 import requests import threading from ...

  3. python unicode 转中文 遇到的问题 爬去网页中遇到编码的问题

    How do convert unicode escape sequences to unicode characters in a python string 爬去网页中遇到编码的问题 Python ...

  4. java批量爬去电影资源

    摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...

  5. 利用python的爬虫技术爬去糗事百科的段子

    初次学习爬虫技术,在知乎上看了如何爬去糗事百科的段子,于是打算自己也做一个. 实现目标:1,爬取到糗事百科的段子 2,实现每次爬去一个段子,每按一次回车爬取到下一页 技术实现:基于python的实现, ...

  6. python爬去电影天堂恐怖片+游戏

    1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...

  7. Python学习之路 (五)爬虫(四)正则表示式爬去名言网

    爬虫的四个主要步骤 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 什么是正则表达式 ...

  8. Python爬虫之爬取慕课网课程评分

    BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...

  9. Python 入门网络爬虫之精华版

    Python 入门网络爬虫之精华版 转载 宁哥的小站,总结的不错 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举 ...

随机推荐

  1. 【转】最近用Timer踩了一个坑,分享一下避免别人继续踩

    [转]最近用Timer踩了一个坑,分享一下避免别人继续踩 最近做一个小项目,项目中有一个定时服务,需要向对方定时发送数据,时间间隔是1.5s,然后就想到了用C#的Timer类,我们知道Timer 确实 ...

  2. Knockout.js组件系统的详解之(一) - 组件的定义和注册

    (Knockout版本:3.4.1 ) KO的组件主要从以下四个部分进行详细介绍: 1.组件的定义和注册 2.组件绑定 3.使用自定义元素 4.自定义组件加载器(高级) 目录结构 1.通过" ...

  3. XML文件的DTD编写

    <?xml version="1.0" encoding="UTF-8" ?> <!--DTD外部引用:--> <!DOCTYPE ...

  4. 【轻松前端之旅】HTML的块元素、行内元素和空元素

    块(block)元素 显示成一块,前后有换行.块元素常用于web页面的主要构造模块.例如:<div>,<p>,<h1>~<h6>,<blockqu ...

  5. PHP 百万级数据导出方案(多 CSV 文件压缩)

    ps:来源 :https://laravel-china.org/articles/15944/php-million-level-data-export-scheme-multi-csv-file- ...

  6. Html5与Css3知识点拾遗(六)

    web字号 px() 百分比(较常用) em(最常用):一般1em=16px,相对单位.以父元素作参照系,父元素大小是不确定的 body{ font-size:100%; /*父元素默认为16px*/ ...

  7. unbuntu14.04下的串口软件monicom的使用

    上篇文章写到了将esp-idf中的examples里的helloworld烧写进了esp32的flash里面,本文就讲讲这个例子的测试和一个项目工程的建立. 首先为了得到esp32输出的信息,需要一个 ...

  8. WebService接口定义及调用

    Web service是一个平台独立的,松耦合的,自包含的.基于可编程的web的应用程序,可使用开放的XML标准来描述.发布.发现.协调和配置这些应用程序,用于开发分布式的互操作的应用程序. WebS ...

  9. rabbitMq 初步

    RabbitMQ的工作原理 它的基本结构 组成部分说明如下: Broker:消息队列服务进程,此进程包括两个部分:Exchange和Queue. Exchange:消息队列交换机,按一定的规则将消息路 ...

  10. document.domain实现不同域名跨域

    利用document.domain 实现跨域:前提条件:这两个域名必须属于同一个基础域名!而且所用的协议,端口都要一致,否则无法利用document.domain进行跨域. 两个子域名:aaa.xxx ...