[java爬虫]爬虫方法与基础网页爬取,数据筛选.

 

话不多说直接干货

 

目录

爬取方法

main方法

爬取的网站源码

筛选方法

实际数据筛选

源码以及所用的包

结束


 

我用到的jar包为jsoup-1.11.3.rar(这个包我会再最后留下分享链接)

只要是静态网站我用的都是这个包进行爬取.

爬取方法

//爬取方法,传入网站网网址,返回爬取的所有源码以String类型
public Document doc = null;
public String Sdoc = null;
public String Crawlers(String url) {
		try {
			doc = Jsoup.connect(url)
					.header("user-agent","Mozilla/5.0 (Windows NT 10.0; WOW64) " +         
                         "AppleWebKit/537.36 (KHTML, like Gecko) "+ 
                             "Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36")
					.ignoreContentType(true).get();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        //将Document 转为 String类型方法 Document.html();
		Sdoc = doc.html();
		return Sdoc;
	}

这里面.header()里的参数为模拟浏览器类型(Chrome:谷歌浏览器,Mozilla:火狐等)

不用过多讲解.

main方法

我就以我之前的博客为目标进行爬取

https://blog.csdn.net/qq_41873771/article/details/84142691

//main方法运行
public class Totality {
public static void main(String[] args) {
        Totality Totality = new Totality();
		String url = "https://blog.csdn.net/qq_41873771/article/details/84142691";
        String text = Totality.Crawlers(url);
		System.out.println(text);
	}
}

 

 

爬取的网站源码

结果就是返回网站的源码,我们要爬取的信息就在这些源码中

使用ctrl+F进行全局搜索:

article-title-box

hide-article-box

 

搜索完你会发现,文章的主要内容就在这些关键词的中间,所以我们要通过筛选的方法一点一点筛选出来.

筛选方法

其实筛选就好似剥洋葱,一层一层.

我这里主要用一下几个方法

.indexOf();

.lastIndexOf();

.substring();

.replace();

接下来我一个一个讲解这些方法怎么用,如果只是想看结果的可以跳过这里.

 

.indexOf(); 

String text = "abcdefghidjk";
//我这里写了两个b
int i = text.indexOf("d");
System.out.println(i);
//最后打印出字符串f的下标为3(下标都是从0开始数的)

返回指定的字符串在因一个字符串中首次出现的位置,从前往后找

与.lastIndexOf();有些不同

String text = "abcdefghidjk";
//我这里写了两个b
int i = text.lastIndexOf("d");
System.out.println(i);
//最后打印出字符串f的下标为9(下标都是从0开始数的)

返回指定的字符串值最后出现的位置,从后往前找

 

这两个方法用于定位想要获取的值的位置

就像上面的两个关键词一样,用来定位文章内容的位置,因为网站源码东西太多,所以需要将有用的单独拿出来.

所有就用到了.substring();方法

String text = "abcdefghidjk";
		int j = text.indexOf("d");
		int i = text.lastIndexOf("d");
		String zhi = text.substring(j,i);
		System.out.println(zhi);
//打印defghi

方法用于提取字符串中介于两个指定下标之间的字符。

这里就用到了之前获取的两个下标.

但有一点注意indexOf()方法获取的下标是包含自己的

比如上面我获取的是第一个b的下标,我截取是就会将b也截取在内.

所以我的习惯是在substring();中,将前面的下标减去自己的长度

String text = "abcdefghidjk";
		int j = text.indexOf("d");
		int i = text.lastIndexOf("d");
		String zhi = text.substring(j-1,i);
		System.out.println(zhi);
//打印efghi

我就会获取中间的内容.

 

.replace();方法

方法用于在字符串中用一些字符替换另一些字符

就是将内容替换成字符串空或其他字符,这里主要用于替换为字符串空,也就是删除.

	String text = "abcdefghidjk";
		text = text.replace("a", "");
		text = text.replace("d", "");
		text = text.replace("g", "");
		System.out.println(text);
//打印bcefhijk

replace()方法将a.d.g字符替换为字符串空,就是删除.

 

用到的方法讲完.

 

实际数据筛选

 

public void Filter_no1(String text) {
		// 获取所需要的主要部分
		beginIndex = text.indexOf("<div class=\"article-title-box\">");
		endIndex = text.indexOf("<div class=\"hide-article-box text-center\">");
		text = text.substring(beginIndex, endIndex);
		// 对主要部分进行筛选
		// 获取文章类型
		beginIndex = text.lastIndexOf("left\">");
		endIndex = text.indexOf("</span>");
		String article_type = text.substring(beginIndex + 6, endIndex);

		// 获取标题
		beginIndex = text.indexOf("title-article");
		endIndex = text.indexOf("</h1>");
		String title_article = text.substring(beginIndex + 15, endIndex);

		// 获取时间
		endIndex = text.indexOf("time");
		String time = text.substring(endIndex + 6);// sub方法一个值时从这个下标开始到String结尾
		endIndex = time.indexOf("</span>");
		time = time.substring(0, endIndex);// 下标从0开始

		// 阅读数
		endIndex = text.indexOf("read-count");
		String read_count = text.substring(endIndex + 12);// sub方法一个值时从这个下标开始到String结尾
		endIndex = read_count.indexOf("</span>");
		read_count = read_count.substring(0, endIndex);// 下标从0开始

		// 用户名
		endIndex = text.indexOf("follow-nickName");
		String Name = text.substring(endIndex);// sub方法一个值时从这个下标开始到String结尾
		beginIndex = Name.indexOf(">");
		endIndex = Name.indexOf("</a>");
		Name = Name.substring(beginIndex + 1, endIndex);// 下标从0开始

		// 个人分类
		String label = "";
		endIndex = text.indexOf("tag-link");
		if (endIndex > 0) {
			label = text.substring(endIndex);// sub方法一个值时从这个下标开始到String结尾
			beginIndex = label.indexOf(">");
			endIndex = label.indexOf("</a>");
			label = label.substring(beginIndex + 1, endIndex);// 下标从0开始
		} else {
			label = "无";
		}

		// 文章内容
		endIndex = text.indexOf("content_views");
		String context = text.substring(endIndex + 15);

		beginIndex = context.indexOf("<p style=");

		if (beginIndex > 0) {
			endIndex = context.indexOf(">");
			String repetition_no1 = context.substring(beginIndex, endIndex + 1);
			context = context.replace(repetition_no1, "");
		}

		// 除去零散的无用字符串
		context = context.replace("<p>", "");
		context = context.replace("<br>", "");
		context = context.replace("</p>", "");
		context = context.replace("<span>", "");
		context = context.replace("</span>", "");
		context = context.replace("</div>", "");
		context = context.replace("&nbsp;", "");

		System.out.println("文章类型:" + article_type);
		System.out.println("标题:" + title_article);
		System.out.println("发布时间:" + time);
		System.out.println("发布者名:" + Name);
		System.out.println("个人分类:" + label);
		System.out.println("文章内容:" + context);


	}

最后打印出筛选后的内容.

 

文章类型:原
标题:[java爬虫] 一.从哪里开始到哪里开始要哪里开始
发布时间:2018年11月20日 08:57:26
发布者名:张德仁
个人分类:java爬虫 
文章内容: 
        我不想一边又一遍的讲爬虫是什么,我写这个系列的目的: 
        1.首先,打破大家学习新事物的误区;我认为能看到我博客的人大部分都是成年人,成年人的时间是不多的,宝贵的,所以不能再像以往上学时从基础开始. 
        2.其次我要写博客就要写干货;直接从数据上下手,将内容都以"模块化"书写并使用. 
        3.将我的所学(自学)的内容分享出来;可能真正的高手与大佬会认为我写的会比较简单基础繁琐,也欢迎各位指出我的错误,在这里先感谢各位. 
         
        我现在正在整理我所有爬虫项目,准备通过一条线将他们关联起来,目前整理的为: 
        1.爬虫方法与基础网页爬取,数据筛选. 
        2.爬虫筛选数据都有什么方法,IO流方法,MySQL数据库使用. 
        3.编写爬虫测试工具(以后会不断完善工具). 
        4.综合爬取CSDN首页数据. 
        5.小总结,并放出我常用的编码格式转换等方法. 
        6.爬取36氪的24小时新闻(涉及寻找网页接口),常用网页接口查找方法. 
        7.爬取网站图片,图片爬取方法(IO流的使用). 
        8.使用爬虫进行网站登录,爬出登录后内容. 
        9.爬取国内外ip地址,制作ip代理池,更换ip隐藏自己. 
        10.未完待续. 
         
        目前就是这样,之后我还会整理的. 

源码以及所用的包

度盘: 源码&包

提取码: 5jdt 

 

 

结束

第一次写这种教学向的博客,可能有些叙述的不是十分清楚,还请大家多多指点.

也希望喜爱爬虫技术的人能够聚集在一起相互学习相互帮助.

写爬虫是我的一个爱好,我也希望能够通过我的爱好结交更多的人,也能帮助更多的人.

有什么不明白的可以加我的群,如果我不忙的时候会解决大家的问题.

 

转载请标明出处

也欢迎加入我的群和我一起探讨java爬虫的乐趣

324757127(新建的群)

有数据定制的爬虫需求也可以加我的qq10554214  标注:数据定制

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章