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,这里最后也详细介绍一下. 首先列举 ...
随机推荐
- 消息模式Toast.makeText的几种常见用法
Toast 是一个 View 视图,快速的为用户显示少量的信息. Toast 在应用程序上浮动显示信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于 一些帮助 / 提示. Toast 最 ...
- python中None与0、Null、false区别
None是Python中的一个关键字,None本身也是个一个数据类型,而这个数据类型就是None,它可0.空字符串以及false均不一样,这些都只是对象,而None也是一个类. 给个bool测试: v ...
- drf1 rest & restful规范
web服务交互 我们在浏览器中能看到的每个网站,都是一个web服务.那么我们在提供每个web服务的时候,都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案. 目前主流的三种 ...
- shp文件和地理数据库文件的区别
存储文件结构不同.所能进行的计算也不同. https://blog.csdn.net/lucahan/article/details/51761610 对数据库操作更快更方便,如何证明?尤其是数据量比 ...
- 函数round和trunc
1.round函数. round函数能够按照数学规则进行四舍五入的进位,以保留小数点后要求的位数. 使用方法为 round(<小数>,<保留的位数>) 下面是两个例子: ) f ...
- 基于ε-NFA的正则表达式引擎
正则表达式几乎每个程序员都会用到,对于这么常见的一个语言,有没有想过怎么去实现一个呢?乍一想,也许觉得困难,实际上实现一个正则表达式的引擎并没有想像中的复杂,<编译原理>一书中有一章专门讲 ...
- 【转】再有人问你Http协议是什么,把这篇文章发给他
一.HTTP简介 1.HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相 ...
- SQL注入之重新认识
i春秋作家:anyedt 原文来自:https://bbs.ichunqiu.com/thread-41701-1-1.html 引言 作为长期占据 OWASP Top 10 首位的注入,认识它掌握它 ...
- Android NDK学习(六): so文件兼容之abiFilters的使用
最近项目中遇到了要使用opencv的情况,涉及到了abi兼容的选择.因为如果全部都适配的话,包很大,这样兼容那些用户数极少的cpu就很不划算,所以我只适配了armeabi-v7a这一个.但是今天在x6 ...
- Web开发经验谈之F12开发者工具/Web调试[利刃篇]
引语:如今的整个Web开发行业甚至说整个软件开发行业,已经相当成熟,基本上已经很少找不到没有前人做过的东西了,或者换句话说,你想要实现的功能,你总能在某个地方搜索到答案,关键是你有没有这个时间精力去搜 ...