Java简单爬虫(一)
简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息。然后我们可以将这些有用的信息保存到数据库或者保存到文件中。如果我们手工一个一个访问提取非常慢,所以我们需要编写程序去获取有用的信息,这也就是爬虫的作用。
一、概念:
网络爬虫,也叫网络蜘蛛(Web Spider),如果把互联网比喻成一个蜘蛛网,Spider就是一只在网上爬来爬去的蜘蛛。网络爬虫就是根据网页的地址来寻找网页的,也就是URL。举一个简单的例子,我们在浏览器的地址栏中输入的字符串就是URL,例如:https://www.baidu.com/
URL就是同意资源定位符(Uniform Resource Locator),它的一般格式如下(带方括号[]的为可选项):
protocol :// hostname[:port] / path / [;parameters][?query]#fragment
URL的格式由三部分组成:
(1)protocol:第一部分就是协议,例如百度使用的就是https协议;
(2)hostname[:port]:第二部分就是主机名(还有端口号为可选参数),一般网站默认的端口号为80,例如百度的主机名就是www.baidu.com,这个就是服务器的地址;
(3)path:第三部分就是主机资源的具体地址,如目录和文件名等。
网络爬虫就是根据这个URL来获取网页信息的。
二、java开发简单的爬虫:
1.利用httpclient访问url
maven地址:
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
代码测试:
package cn.qlq.craw.httpClient; import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod; public class HttpClientCraw { public static void main(String[] a) throws Exception {
HttpClient client = new HttpClient();
PostMethod postMethod = new PostMethod("http://qiaoliqiang.cn/");
// 防止中文乱码
postMethod.getParams().setContentCharset("utf-8");
// 3.设置请求参数
postMethod.setParameter("mobileCode", "13834786998");
postMethod.setParameter("userID", "");
// 4.执行请求 ,结果码
int code = client.executeMethod(postMethod);
// 5. 获取结果
String result = postMethod.getResponseBodyAsString();
System.out.println("Post请求的结果:" + result);
}
}
结果:
Post请求的结果:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>XXXXXXXXXXX</title>
<script src="JS/jquery-1.8.3.js"></script>
..........
关于httpclient的用法参考:http://www.cnblogs.com/qlqwjy/p/7554535.html
2.利用Jsoup简单的爬虫:
Jsoup是一个强大的HTML后端解析插件,利用它我们可以将获取到的内容转换成DOM树,然后像jQuery操作DOM一样进行选择以及修改DOM,我们可以非常方便的利用它的选择器方便的提取我们想要的信息并保存到数据库或者文本文件中。
在这篇只是简单的介绍一下其获取URL数据,下篇继续介绍利用选择器处理数据。
maven地址:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.9.2</version>
</dependency>
代码测试:
package cn.qlq.craw.Jsoup; import java.io.IOException; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
/**
* 一个简单的利用Jsoup获取网站数据的信息
* @author liqiang
*
*/
public class JsoupCraw { public static void main(String[] args) throws IOException {
String url = "http://www.cnblogs.com/qlqwjy/p/7531579.html";
//直接获取DOM树
Document document = Jsoup.connect(url).get();
System.out.println(document.toString());
}
}
结果:
<!doctype html>
<html lang="zh-cn">
<head>
...
关于Jsoup的用法参考:http://www.cnblogs.com/qlqwjy/p/7531579.html
3.手工的一个爬虫,这个获取的页面的信息比较全:(HttpURLConnection 的使用)
package cn.qlq.craw.JsoupBoke; import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL; public class UrlCrawBoke { public static void main(String urlstr[]) throws IOException {
InputStream is = doGet("http://www.cnblogs.com/qlqwjy/p/8721867.html");
String pageStr = inputStreamToString(is, "UTF-8");
is.close();
System.out.println(pageStr);
} public static InputStream doGet(String urlstr) throws IOException {
URL url= new URL(urlstr);
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36");
InputStream inputStream= conn.getInputStream();
return inputStream;
} public static String inputStreamToString(InputStream is, String charset) throws IOException {
byte[] bytes = new byte[1024];
int byteLength = 0;
StringBuffer sb = new StringBuffer();
while((byteLength = is.read(bytes)) != -1) {
sb.append(new String(bytes, 0, byteLength, charset));
}
return sb.toString();
}
}
Java简单爬虫(一)的更多相关文章
- java简单web爬虫(网页图片)
java简单web爬虫(网页图片)效果,执行main()方法后图片就下载道C盘的res文件夹中.没有的话创建一个文件夹代码里的常量根据自己的需求修改,代码附到下面. package com.sinit ...
- java网络爬虫----------简单抓取慕课网首页数据
© 版权声明:本文为博主原创文章,转载请注明出处 一.分析 1.目标:抓取慕课网首页推荐课程的名称和描述信息 2.分析:浏览器F12分析得到,推荐课程的名称都放在class="course- ...
- Java 网络爬虫,就是这么的简单
这是 Java 网络爬虫系列文章的第一篇,如果你还不知道 Java 网络爬虫系列文章,请参看 学 Java 网络爬虫,需要哪些基础知识.第一篇是关于 Java 网络爬虫入门内容,在该篇中我们以采集虎扑 ...
- [Java]使用HttpClient实现一个简单爬虫,抓取煎蛋妹子图
第一篇文章,就从一个简单爬虫开始吧. 这只虫子的功能很简单,抓取到”煎蛋网xxoo”网页(http://jandan.net/ooxx/page-1537),解析出其中的妹子图,保存至本地. 先放结果 ...
- 开源的49款Java 网络爬虫软件
参考地址 搜索引擎 Nutch Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. Nutch的创始人是Doug Cutting, ...
- java正则表达式之java小爬虫
这个java小爬虫, 功能很简单,只有一个,抓取网上的邮箱.用到了javaI/O,正则表达式. public static void main(String[] args) throws IOExce ...
- 【转】44款Java 网络爬虫开源软件
原帖地址 http://www.oschina.net/project/lang/19?tag=64&sort=time 极简网络爬虫组件 WebFetch WebFetch 是无依赖极简网页 ...
- python简单爬虫一
简单的说,爬虫的意思就是根据url访问请求,然后对返回的数据进行提取,获取对自己有用的信息.然后我们可以将这些有用的信息保存到数据库或者保存到文件中.如果我们手工一个一个访问提取非常慢,所以我们需要编 ...
- python 简单爬虫(beatifulsoup)
---恢复内容开始--- python爬虫学习从0开始 第一次学习了python语法,迫不及待的来开始python的项目.首先接触了爬虫,是一个简单爬虫.个人感觉python非常简洁,相比起java或 ...
随机推荐
- 如何在java中实现跨线程的通讯
一般而言,如果没有干预的话,线程在启动之后会一直运行到结束,但有时候我们又需要很多线程来共同完成一个任务,这就牵扯到线程间的通讯. 如何让两个线程先后执行?Thread.join方法 private ...
- SSH管理(重启 停止 运行 安装)centos7
下面整理经常用到管理SSH服务的命令,方便复制哈. SSH服务状态 systemctl status sshd.service SSH运行命令 service sshd start SSH重启命令 s ...
- 【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序
前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...
- gpart 分区工具
gpart 分区工具 https://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/disk-organization.html Table 3 ...
- 转:Python 文本挖掘:使用gensim进行文本相似度计算
Python使用gensim进行文本相似度计算 转于:http://rzcoding.blog.163.com/blog/static/2222810172013101895642665/ 在文本处理 ...
- [NOI2011]兔兔与蛋蛋游戏 二分图博弈
题面 题面 题解 通过观察,我们可以发现如下性质: 可以看做是2个人在不断移动空格,只是2个人能移动的边不同 一个位置不会被重复经过 : 根据题目要求,因为是按黑白轮流走,所以不可能重复经过一个点,不 ...
- 解题:POI 2009 TAB
题面 这也算是个套路题(算吗)?发现换来换去每行每列数的组成是不变的,那么就把每行每列拎出来哈希一下,复杂度$O(Tn^2log$ $n)$有点卡时=.=. 然而正解似乎不需要哈希,就像这样↓ ;i& ...
- Linux基础--------centos7 安装python3(yum安装)
#安装sqlite-devel yum -y install sqlite-devel #安装依赖 yum -y install make zlib zlib-devel gcc-c++ libtoo ...
- Calculating and saving space in PostgreSQL
Q: I have a table in pg like so: CREATE TABLE t ( a BIGSERIAL NOT NULL, -- 8 b b SMALLINT, -- 2 b c ...
- HDU--2363
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=2363 分析:最短路+二分. #include<iostream> #include< ...