网络爬虫----男!生!福!利!

一、配置mvn依赖

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.1.2</version>

</dependency>

二、代码

1、获取网页内容

package com.chenanyi.fuli.Helper;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
public class GetHHH {
/**
 * 根据URL抓取网页内容 此类要用到HttpClient组件
 * @author 陈安一
 * @param url
 * @return
 */
public static String getContentFormUrl(String url)  
    {  
        /* 实例化一个HttpClient客户端 */ 
        HttpClient client = new DefaultHttpClient();  
        HttpGet getHttp = new HttpGet(url);  
  
        String content = null;  
  
        HttpResponse response;  
        try 
        {  
            /*获得信息载体*/ 
            response = client.execute(getHttp);  
            HttpEntity entity = response.getEntity();  
  
            if (entity != null)  
            {  
                /* 转化为文本信息 */ 
                content = EntityUtils.toString(entity);  
        }
        }catch (Exception e)  
        {  
            e.printStackTrace();  
        } finally 
        {  
            client.getConnectionManager().shutdown();  
        }  
          
        return content;  
    }
    }

2、获取页面列表内所有标题的Url

    
package com.chenanyi.fuli.Helper;
import java.util.ArrayList;
import java.io.StringReader;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegContent {
/**
 * @author 陈安一
 * @功能 根据正则表达式匹配返回的网页信息
 * @param reg
 * @param info
 * @return List<String>
 */
public static List<String> GetCon(String reg,String info){
List<String> result=new ArrayList<String>();
        Matcher m = Pattern.compile(reg).matcher(info);
        while (m.find()) {
            String r = m.group();
            result.add(r);
        }
return result;
}
public static String GetDiv(String info){
SAXReader reader = new SAXReader();
        Document doc;
try {
doc = reader.read(new StringReader(info));
        Node node = doc.selectSingleNode("//body/div/div/div");
        System.out.println(node.getText());
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
}
return info;
}
public static String GetOneCon(String reg,String info){
String result=info;
        Matcher m = Pattern.compile(reg).matcher(info);
        while (m.find()) {
        result = m.group();
        }
return result;
}
/**
 * @author 陈安一
 * @功能 根据GetCon方法返回的List列表对数据进行重组,返回一个URL
 * @param result
 * @return
 */
public static List<String> GetallURL(List<String> result){
for(int i=0;i<result.size();i++){
result.set(i, "http://www.laossee.com/"+result.get(i)+".html");
}
return result;
}
}

3、将内容保存到电脑中

package com.chenanyi.fuli.Helper;
import java.io.FileWriter;
import java.io.IOException;
public class SaveTxt {
/**
 * @author 陈安一
 * @功能 将小说保存到本地中
 * @param url
 * @param title 例如"noexists.txt"
 * @param cont
 * @return
 */
public static void Sava(String title,String cont){
FileWriter fileWriter = null;
try {
fileWriter = new FileWriter(title,true);
fileWriter.write(cont);
fileWriter.flush();;
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
fileWriter.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

4、图片类的处理--下载图片保存到本地

package com.chenanyi.fuli.Helper;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
public class Download {
/**
 * @author 陈安一
 * @功能 根据url,保存路径,count(保存的标题,直接以数字保存)
 */
public static void down(String url, String path,int count) {
// 构造URL
URL img_url;
URLConnection con;
try {
img_url = new URL(url);
con = img_url.openConnection();
// 设置请求超时为5s
con.setConnectTimeout(5 * 1000);
// 输入流
InputStream is = con.getInputStream();
// 1K的数据缓冲
byte[] bs = new byte[1024];
// 读取到的数据长度
int len;
// 输出的文件流
File sf = new File(path);
if (!sf.exists()) {
sf.mkdirs();
}
String filename = count+".jpg";
OutputStream os;
try {
os = new FileOutputStream(sf.getPath() + "\\" + filename);
// 开始读取
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
// 完毕,关闭所有链接
os.close();
is.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}

5、根据获取的url处理返回的html代码,提取小说或者图片保存到文件中

(1)、获取txt的

package com.chenanyi.fuli.NBHelp;
import java.util.List;
import com.chenanyi.fuli.Helper.GetHHH;
import com.chenanyi.fuli.Helper.RegContent;
import com.chenanyi.fuli.Helper.SaveTxt;
public class GetTxT {
/**
 * @author 陈安一
 * @param cate 分类,16是RQ
 * @param pagecount 爬取得总页数
 */
public static void Gettxt(int cate,int pagecount) {
for (int m = 1; m < pagecount; m++) {
int count = 0;
// article-list-id-16-page- 16是小说- RQ小说。
// 6是图片---ZPTP
String url = "http://www.laossee.com/article-list-id-"+cate+"-page-" + m
+ ".html";
String info = GetHHH.getContentFormUrl(url);
String reg = "article-show-id-\\d{6}";
List<String> result = RegContent.GetallURL(RegContent.GetCon(reg,
info));
for (int i = 0; i < result.size(); i++) {
String cont = GetHHH.getContentFormUrl(result.get(i));
List<String> titles = RegContent.GetCon("<title>.*?</title>",
cont);
String reggg = "<br />.*?<br />";
List<String> Content = RegContent.GetCon(reggg, cont);
String conts = "";
for (int f = 0; f < Content.size(); f++) {
conts += Content.get(f);
}
conts = conts.replace("<br />", "");
for (int j = 0; j < titles.size(); j++) {
count++;
String title = RegContent.GetOneCon(">.*?<", titles.get(j));
title = title.replace("/", "").replace(" ", "");
title = "txt/"
+ title.substring(1, title.length() - 1)
.replace(‘(‘, ‘ ‘).trim().replace(‘)‘, ‘ ‘)
.trim().replace(‘(‘, ‘ ‘).trim()
.replace(‘)‘, ‘ ‘).trim() + ".txt";
SaveTxt.Sava(title, conts);
System.out.println("第" + m + "页第" + count + "个" + title);
}
}
}
}
}

(2)、下载图片

package com.chenanyi.fuli.NBHelp;
import java.util.ArrayList;
import java.util.List;
import com.chenanyi.fuli.Helper.Download;
import com.chenanyi.fuli.Helper.GetHHH;
import com.chenanyi.fuli.Helper.RegContent;
public class Getimg {
/**
 * @author 陈安一!
 * @param cate 类别,6是ZpTp
 * @param pagecount 爬取的页数
 * @return List<String> 图片链接
 */
public static void Getimg(int cate, int pagecount,String path) {
int count=0;
for (int m = 1; m <= pagecount; m++) {
// article-list-id-16-page- 16是小说- RQ小说。
// 6是图片---ZPTP
String url = "http://www.laossee.com/article-list-id-" + cate
+ "-page-" + m + ".html";
String info = GetHHH.getContentFormUrl(url);
String reg = "article-show-id-\\d{6}";
List<String> result = RegContent.GetallURL(RegContent.GetCon(reg,
info));
for (int i = 0; i < result.size(); i++) {
String cont = GetHHH.getContentFormUrl(result.get(i));
List<String> img_urls = RegContent.GetCon("<img src=\"(.*?)/>",
cont);
for (int j = 0; j < img_urls.size(); j++) {
count++;
String temp = img_urls.get(j).substring(10);
int index = temp.indexOf("\"");
temp = temp.substring(0, index);
Download.down(temp, path,count);
System.out.println(count+"\tOK");
}
}
}
}
/**
 * @author 陈安一!
 * @param cate 类别,6是ZpTp
 * @param pagecount 爬取的页数
 * @return List<String> 图片链接
 */
public static List<String> GetOnePageimg(int cate, int page) {
List<String> img_url = new ArrayList<String>();
// article-list-id-16-page- 16是小说- RQ小说。
// 6是图片---ZPTP
String url = "http://www.laossee.com/article-list-id-" + cate
+ "-page-" + page + ".html";
String info = GetHHH.getContentFormUrl(url);
String reg = "article-show-id-\\d{6}";
List<String> result = RegContent.GetallURL(RegContent.GetCon(reg,
info));
for (int i = 0; i < result.size(); i++) {
String cont = GetHHH.getContentFormUrl(result.get(i));
List<String> img_urls = RegContent.GetCon("<img src=\"(.*?)/>",
cont);
for (int j = 0; j < img_urls.size(); j++) {
String temp = img_urls.get(j).substring(10);
int index = temp.indexOf("\"");
temp = temp.substring(0, index);
System.out.println(temp);
img_url.add(temp);
}
}
return img_url;
}
}

6、运行!

package com.chenanyi.fuli.start;
import com.chenanyi.fuli.NBHelp.Getimg;
public class Start {
/**
 * @author 陈安一
 * @see 网络爬虫
 * @功能 获取***** 哈哈哈哈哈哈
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out
.println("**************************************************************");
System.out
.println("**************************************************************");
System.out.println("第一个参数,分类(6,7,13),小说(14,15,16)");
System.out
.println("**************************************************************");
System.out.println("第二个参数,获取的总页码数,总页码数>=1");
System.out
.println("**************************************************************");
System.out.println("第三个参数,保存的地址 : 格式 f:\\\\image4\\\\");
System.out
.println("**************************************************************");
System.out.println("请输入第一个参数");
int value = scanner.nextInt();
System.out.println("请输入第二个参数");
int value1 = scanner.nextInt();
System.out.println("请输入第三个参数");
String line = scanner.next();
System.out.println("开始执行");
Getimg.Getimg(value, value1, line);
System.out.println("执行完毕");
} catch (Exception e) {
e.printStackTrace();
}
}
}

7、给我评论!

时间: 2024-12-05 09:11:55

网络爬虫----男!生!福!利!的相关文章

C# 网络爬虫利器之Html Agility Pack如何快速实现解析Html

简介 现在越来越多的场景需要我们使用网络爬虫,抓取相关数据便于我们使用,今天我们要讲的主角Html Agility Pack是在爬取的过程当中,能够高效的解析我们抓取到的html数据. 优势 在.NET技术下,解析html工具也很多,比如很多人可能会使用htmlparser,或者微软的MSHTML,htmlparser虽然比较易上手,但是相对应的解析速度较慢,而Html Agility Pack解析速度相当快,并且开源,易用,它可以帮助我们解析html文档就像用XmlDocument类来解析xm

Java开发、网络爬虫、自然语言处理、数据挖掘简介

一.java开发 (1) 应用开发,即Java SE开发,不属于java的优势所在,所以市场占有率很低,前途也不被看好. (2) web开发,即Java Web开发,主要是基于自有或第三方成熟框架的系统开发,如ssh.springMvc.springside.nutz.,面向各自不同的领域,像OA.金融.教育等有非常成熟案例,这是目前最大的市场所在,故人称“java为web而生”.但目前看它的缺点入门不高,所以待遇相对中等,上升空间很有限且缓慢. (3)移动开发(Android),是目前的大趋势

Python3网络爬虫(七):使用Beautiful Soup爬取小说

转载请注明作者和出处:http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 一.Beautiful Soup简介 简单来说,Beautiful Soup是python的一个库,最主要的功能是从网页抓取数据.官方解释如下: Beautiful Soup提供一些简单的.python式的函数用来处理导航.搜索.修改分析树等功能.它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简

手把手教你写网络爬虫(3):开源爬虫框架对比

手把手教你写网络爬虫(3) 作者:拓海 摘要:从零开始写爬虫,初学者的速成指南! 封面: 介绍 大家好!我们从今天开始学习开源爬虫框架Scrapy,如果你看过<手把手>系列的前两篇,那么今天的内容就非常容易理解了.细心的读者也许会有疑问,为什么不学出身名门的Apache顶级项目Nutch,或者人气飙升的国内大神开发的Pyspider等框架呢?原因很简单,我们来看一下主流爬虫框架在GitHub上的活跃度: Project Language Star Watch Fork Nutch Java 1

第一章 网络爬虫简介

本章将介绍如下主题: 网络爬虫领域介绍 爬虫的合法与非法性 对目标网站进行背景调研 逐步完善一个高级网络爬虫 1.1 网络爬虫的使用场景 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模拟程序或者蠕虫. 爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件.  

Python3网络爬虫(十一):爬虫黑科技之让你的爬虫程序更像人类用户的行为(代理IP池等)

原文链接: Jack-Cui,http://blog.csdn.net/c406495762 运行平台: Windows Python版本: Python3.x IDE: Sublime text3 1 前言 近期,有些朋友问我一些关于如何应对反爬虫的问题.由于好多朋友都在问,因此决定写一篇此类的博客.把我知道的一些方法,分享给大家.博主属于小菜级别,玩爬虫也完全是处于兴趣爱好,如有不足之处,还望指正. 在互联网上进行自动数据采集(抓取)这件事和互联网存在的时间差不多一样长.今天大众好像更倾向于

什么是网络爬虫?有什么用?怎么爬?一篇文章带你领略python爬虫的魅力

网络爬虫也叫做网络机器人,可以代替人们自动地在互联网中进行数据信息的采集与整理.在大数据时代,信息的采集是一项重要的工作,如果单纯靠人力进行信息采集,不仅低效繁琐,搜集的成本也会提高. 此时,我们可以使用网络爬虫对数据信息进行自动采集,比如应用于搜索引擎中对站点进行爬取收录,应用于数据分析与挖掘中对数据进行采集,应用于金融分析中对金融数据进行采集,除此之外,还可以将网络爬虫应用于舆情监测与分析.目标客户数据的收集等各个领域. 当然,要学习网络爬虫开发,首先需要认识网络爬虫,本文将带领大家一起认识

Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

对于动漫爱好者来说,海贼王.火影.死神三大动漫神作你肯定肯定不陌生了.小编身边很多的同事仍然深爱着这些经典神作,可见"中毒"至深.利用Python大法带大家分析一下这些神作,看看这些神作到底在讲些神马. 人生苦短,我用Python.利用Python网络爬虫爬取了豆瓣网,将网站上关于这三部动漫的评论全部抓取下来,之后通过Python的第三方库jieba分词进行词频统计和分析,最后通过matplotlib库和wordcloud库将关键词制作成词云进行可视化展示. 词云是神魔?"词

简谈-网络爬虫的几种常见类型

众所周知,网络爬虫(或称为网络爬虫.网络蜘蛛.机器人)是搜索引擎最上游的一个模块,是负责搜索引擎内容索引的第一关. 很多人为了提高自己网站的索引量,都是去网上随便找一些爬虫工具来使用.但是很多人不知道,这些抓取网站的小爬虫是有各种各样的不同性格的. 常见的优秀网络爬虫有以下几种类型: 1.批量型网络爬虫:限制抓取的属性,包括抓取范围.特定目标.限制抓取时间.限制数据量以及限制抓取页面,总之明显的特征就是受限: 2.增量型网络爬虫(通用爬虫):与前者相反,没有固定的限制,无休无止直到抓完所有数据.