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页面:
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一样方便爬去世间万物的更多相关文章
- Java基础-爬虫实战之爬去校花网网站内容
Java基础-爬虫实战之爬去校花网网站内容 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 爬虫这个实现点我压根就没有把它当做重点,也没打算做网络爬虫工程师,说起爬虫我更喜欢用Pyt ...
- Python 2.7 爬取51job 全国java岗位
一页有50条数据一共2000页 分页是get分页 #!/usr/bin/python # encoding: utf-8 import requests import threading from ...
- python unicode 转中文 遇到的问题 爬去网页中遇到编码的问题
How do convert unicode escape sequences to unicode characters in a python string 爬去网页中遇到编码的问题 Python ...
- java批量爬去电影资源
摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...
- 利用python的爬虫技术爬去糗事百科的段子
初次学习爬虫技术,在知乎上看了如何爬去糗事百科的段子,于是打算自己也做一个. 实现目标:1,爬取到糗事百科的段子 2,实现每次爬去一个段子,每按一次回车爬取到下一页 技术实现:基于python的实现, ...
- python爬去电影天堂恐怖片+游戏
1.爬去方式python+selenium 2.工作流程 selenium自动输入,自动爬取,建立文件夹,存入磁力链接到记事本 3.贴上代码 #!/usr/bin/Python# -*- coding ...
- Python学习之路 (五)爬虫(四)正则表示式爬去名言网
爬虫的四个主要步骤 明确目标 (要知道你准备在哪个范围或者网站去搜索) 爬 (将所有的网站的内容全部爬下来) 取 (去掉对我们没用处的数据) 处理数据(按照我们想要的方式存储和使用) 什么是正则表达式 ...
- Python爬虫之爬取慕课网课程评分
BS是什么? BeautifulSoup是一个基于标签的文本解析工具.可以根据标签提取想要的内容,很适合处理html和xml这类语言文本.如果你希望了解更多关于BS的介绍和用法,请看Beautiful ...
- Python 入门网络爬虫之精华版
Python 入门网络爬虫之精华版 转载 宁哥的小站,总结的不错 Python学习网络爬虫主要分3个大的版块:抓取,分析,存储 另外,比较常用的爬虫框架Scrapy,这里最后也详细介绍一下. 首先列举 ...
随机推荐
- javascript的异步编程
同步与异步 介绍异步之前,回顾一下,所谓同步编程,就是计算机一行一行按顺序依次执行代码,当前代码任务耗时执行会阻塞后续代码的执行. 同步编程,即是一种典型的请求-响应模型,当请求调用一个函数或方法后, ...
- delphi 中OutputDebugString 函数的妙用(转载)
原文地址 https://www.peganza.com/delphi-and-outputdebugstring.html Ever wanted to monitor your Delphi ap ...
- springBoot基础
开始之前最基础的东东here 官网:http://projects.spring.io/spring-boot/ 基础快速构建:http://start.spring.io/ 松哥的博客:http:/ ...
- shell脚本基础教程
一.什么是shell: shell解释:引用别人的话说:“Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.Shell 既是一种命令语言,又是一种程序设计语言.” 简而言之, ...
- 制作Visual Studio 2019 (VS 2019) 离线安装包
与制作Visual Studio 2017的离线安装包(https://www.cnblogs.com/danzhang/p/6534341.html)类似,可以使用--layout的参数在安装前先下 ...
- 第八节:详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架
前言 大家好,给大家带来详细讲解Java中的异常处理情况与I/O流的介绍以及类集合框架的概述,希望你们喜欢 JAVA 异常 try...catch...finally结构的使用方法 class Tes ...
- 腾讯云播放器更新——TCplayer
概述 最近腾讯云播放器进行了更新,增加了TCplayer,支持点播播放.由于工作需要,了解了一下TCplayer,把心得记录下来,供以后开发时参考,相信对其他人也有用. 参考文档: TCPlayer开 ...
- 恭喜"微微软"喜当爹,Github嫁入豪门。
今天是 Github 嫁入豪门的第 2 天,炒得沸沸扬扬的微软 Github 收购事件于昨天(06月04日)尘埃落定,微软最终以 75 亿美元正式收购 Github. 随后,Gitlab 趁势带了一波 ...
- 架构书籍推荐:Java中高级、架构师值得一读!
上周我们免费送出了6本关于Python的重量级技术书籍,推出后反响特别强烈,有一个和最后一名仅差了一个赞,不过我们还是额外加送了一本送给这位朋友,以资鼓励,从另一面也可以看出Java程序猿对Pytho ...
- 内存管理cpuset,mempolicy[原理]
介绍cpuset,mbind,set_mempolicy在内存管理上的应用 change log :确定先从mempolicy的man 手册翻译开始研究,计划如下 .先从man手册入手,通过实现mem ...