精华内容
下载资源
问答
  • Java 爬取网页

    2020-04-18 17:59:02
    我们使用 net.URL 类的 URL() 构造函数来抓取网页 代码如下 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.InputStreamReader; import java.net.URL; ...
    我们使用 net.URL 类的 URL() 构造函数来抓取网页

    代码如下

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.InputStreamReader;
    import java.net.URL;
     
    public class Main {
       public static void main(String[] args) 
       throws Exception {
          URL url = new URL("http://www.baidu.com");
          BufferedReader reader = new BufferedReader
          (new InputStreamReader(url.openStream()));
          BufferedWriter writer = new BufferedWriter
          (new FileWriter("test.html"));
          String line;
          while ((line = reader.readLine()) != null) {
             System.out.println(line);
             writer.write(line);
             writer.newLine();
          }
          reader.close();
          writer.close();
       }
    }
    

    结果输出

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8"/>……
    

    在这里插入图片描述

    展开全文
  • 利用java爬取网页信息,并且到处excel,亲测有用,有问题可以联系我
  • Java爬取网页图片

    千次阅读 2017-10-20 10:36:51
    Java爬取网页图片

    首先需要下载相关的依赖包,我用的是eclipse,直接百度maven然后搜索相应的依赖放到pom文件中就行了。

    爬取的网址为:http://info.sporttery.cn/roll/fb_list.php?s=&c=%CF%FA%C1%BF%B9%AB%B8%E6&2

    代码的大致步骤为:

    1.先用URL和openStream将销量公告所有时期的网页下载到本地,由于可能会有很多页,所以就需要先知道page数再按照page逐页下载。

    2.用indexOf("html")提取本地的HTML文件,并按照名称排序(这里涉及到page10和page2的排序规则,正常的是2在前面,但因为是字符串所以page10排在了前面,所以需要特殊处理,处理方法见listHtmlFiles方法)。

    3.用Jsoup解析HTML文件,将每周公告对应的链接保存到linkedHref中

    4.用scanner输入需要爬取的起始日期和截止日期,并用matchHtml方法提取该时间段的每周销量公告对应的链接

    5.用Jsoup解析所需爬取的HTML文件,将图片对应的链接保存到PhotoHtmlList中。

    6.用URL链接图片地址,并用ByteArrayOutputStream将图片保存为jpg格式。

    7.用delete方法删除已下载到本地的HTML文件。


    完整代码如下:

    package com.xlh.bd.internal.service;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Collections;
    import java.util.Date;
    import java.util.List;
    import java.util.Scanner;


    import org.apache.commons.io.FileUtils;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFSheet;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;

    public class SpiderXlggService {
    /**
    * 爬取销量公告数据
    */
    public static String startDate = null; //起始日期
    public static String endDate = null;   //截止日期
    public static List<String> linkedHref = new ArrayList<String>();
    public static String url = "http://info.sporttery.cn/roll/fb_list.php?c=%CF%FA%C1%BF%B9%AB%B8%E6&&page=";
    public static List<String> urlList = new ArrayList<String>(); //网页列表
    public static List<String> PhotoHtmlList = new ArrayList<String>(); //图片网页列表
    public static List<String> timeList = new ArrayList<String>(); //时间列表
    public static int pageCount = 0;

    public void getAllUrlList() throws IOException{
    String url2 = url +1;
        Document doc = Jsoup.connect(url2).get(); //从URL直接加载 HTML 文档
            Elements links = doc.getElementsByClass("m-page");        
            for (Element element : links) {
            Elements links2 = element.getElementsByTag("a");//得到<td>...</td>里面的内容
            String linkText = null;
            for (Element element2 : links2) {
            linkText = element2.attr("href"); //读取href的值        
            }
            int first = linkText.indexOf("page=");
                int last = linkText.indexOf("&&");
                pageCount = (int) Math.ceil(Double.parseDouble(linkText.substring(first+"page=".length(), last)));
                System.out.println("共有"+pageCount+"页需要爬取,请耐心等耐!");
            }
        }

    public class ReadAllHtml extends Thread {
    private String s = null;
    public ReadAllHtml(String s){
           this.s = s ;
       }
    public void run(){
    System.out.println("正在下载"+s);
    for (int i=1; i<=pageCount; i++) {
    String url2 = url + i;
    System.out.println("Page" + i + "starts!");
    try {
          File dest = new File("page" + i +".html"); 
                   InputStream is; //接收字节输入流
    FileOutputStream fos = new FileOutputStream(dest); //字节输出流

        URL temp = new URL(url2); //加载网页
               is = temp.openStream();  
               
               BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲            
               BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲


               int length;    
               byte[] bytes = new byte[1024*20];
               while((length = bis.read(bytes, 0, bytes.length)) != -1){
                   fos.write(bytes, 0, length);
               }
               bos.close();
               fos.close();
               bis.close();
               is.close();
    sleep(10); //间隔0.01秒
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    public static List<File> listHtmlFiles(String path){
            File file = new File(path); //读取本地html的路径        
            File[] array = file.listFiles(); //用于存储路径下的文件名
            List<File> array2 = new ArrayList<File>();
            for(int i=0;i<array.length;i++){
                if(array[i].isFile()&&array[i].getName().indexOf("html")>-1){
                array2.add(array[i]);
                }        
            }
            List<Integer> num = new ArrayList<Integer>();
            for(int i=0;i<array2.size();i++){
            String string = array2.get(i).toString();
            int first = string.indexOf("page");
                int last = string.indexOf(".");
            num.add(Integer.parseInt(string.substring(first+"page".length(), last)));
            }
            Collections.sort(num); //按值排序
            List<String> num2 = new ArrayList<String>();
            for (Integer integer : num) {
            num2.add("page"+String.valueOf(integer)+".html");
    }
            List<File> array3 = new ArrayList<File>();
            for(int i=0;i<num2.size();i++){
            for (File file2 : array2) {
            if(file2.toString().contains(num2.get(i))) array3.add(file2);
    }
            }
    return array3;
    }

        public static void getLocalhtml(String path) { //解析本地的html 
        List<File> array = listHtmlFiles(path);
            //循环读取并解析这些文件
            for(int i=0; i<array.size(); i++){
                try{
                    //文件名字
                    System.out.println("正在解析网址:" + array.get(i).getName()+"!");
                    //下面开始解析本地的html
                    Document doc = Jsoup.parse(array.get(i), "gb2312"); 
                    Elements links = doc.getElementsByClass("List_L FloatL");//分离出class="List_L FloatL"的所有东西
                    for (Element link : links) {
                        Elements links2 = link.getElementsByTag("li");  
                        for (Element element : links2) {
                        Elements links3 = element.getElementsByTag("a");//得到<td>...</td>里面的内容
                        for (Element element3 : links3) {
                                String linkText2 = element3.attr("href");//得到<th>...</th>里面的内容
                                if(!linkText2.contains("销量公告")) linkedHref.add(linkText2);
                            } 
       
    }
                    System.out.println(array.get(i).getName()+"解析完毕!");
                 } catch (Exception e) {
                        System.out.println("网址:" + array.get(i).getName() + "解析出错");
                        e.printStackTrace();
                        continue;
                    }
            }
    //        for (String string:linkedHref) {
    // System.out.println(string);
    // }
        }
        
        public static void matchHtml() throws IOException{
        DateFormat format2 = new SimpleDateFormat("yyyy/MMdd"); //字符串时间格式
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入起始日期,格式为yyyy/MMdd:");
        startDate = sc.next();
    Date date = null;
    try {
    date = (Date)format2.parse(startDate);
    } catch (ParseException e) {
    System.out.println("起始日期输入格式错误");
    e.printStackTrace();
    }
       
        Scanner sc2 = new Scanner(System.in);
        System.out.println("请输入截止日期,格式为yyyy/MMdd:");
        endDate = sc2.next();
        Date date2 = null;
    try {
    date2 = (Date)format2.parse(endDate);
    } catch (ParseException e) {
    System.out.println("截止日期输入格式错误");
    e.printStackTrace();
    }
        sc.close();
        sc2.close();
        Calendar dd = Calendar.getInstance(); //定义日期实例
        dd.setTime(date);
        while(dd.getTime().before(date2)){ //不包括endDate
        String str = format2.format(dd.getTime()); //日期转换为字符串        
        dd.add(Calendar.DATE, 1); //天数加1
        for(String string:linkedHref){
            if(string.contains(str)) {
            urlList.add(string); //网页列表
                timeList.add(str.substring(5));
            }
        }
        }
    //     for (String string : urlList) {
    //     System.out.println(string);
    // }
        }
            
        public static void writeExcel(String path) throws IOException{ //将网页链接写入excel
        //创建一个文件
    File file2 = new File(path+"urlList.xlsx");
    file2.createNewFile();
    //将excel数据存盘
    FileOutputStream stream2 = FileUtils.openOutputStream(file2);
    //创建excel工作簿(最后需要往里写数据)
    XSSFWorkbook workbook2 = new XSSFWorkbook();
    XSSFSheet sheet2 = workbook2.createSheet();//创建sheet
    System.out.println("正在写入excel!");
    for (int i = 0; i < urlList.size(); i++) { //创建行
    XSSFRow row2 = sheet2.createRow(i);
    XSSFCell cell2 = row2.createCell(0);
    cell2.setCellValue(urlList.get(i));
    }
    workbook2.write(stream2);
    stream2.close();
    workbook2.close();
    System.out.println("写入完毕!");
        }


        public static void deleteHtml(String path){ //删除path下的html文件
        File file = new File(path);
        File[] files = file.listFiles();
        for (File file2 : files) {
    if(file2.getName().indexOf("html")>-1) file2.delete();
    }
        }
        
        public class ReadNeedHtml extends Thread {
    private String s = null;
    public ReadNeedHtml(String s){
           this.s = s ;
       }
    public void run(){
    System.out.println("正在下载"+s);
    for (int i=0; i<urlList.size(); i++) {
    String url2 = urlList.get(i);
    System.out.println(timeList.get(i) + "starts!");
    try {
          File dest = new File(timeList.get(i)+".html"); 
                   InputStream is; //接收字节输入流
    FileOutputStream fos = new FileOutputStream(dest); //字节输出流

        URL temp = new URL(url2); //加载网页
               is = temp.openStream();  
               
               BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲            
               BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲


               int length;    
               byte[] bytes = new byte[1024*20];
               while((length = bis.read(bytes, 0, bytes.length)) != -1){
                   fos.write(bytes, 0, length);
               }
               bos.close();
               fos.close();
               bis.close();
               is.close();
    sleep(10); //间隔0.01秒
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }

    public static List<File> listHtmlFiles2(String path){
            File file = new File(path); //读取本地html的路径        
            File[] array = file.listFiles(); //用于存储路径下的文件名
            List<File> array2 = new ArrayList<File>();
            for(int i=0;i<array.length;i++){
                if(array[i].isFile()&&array[i].getName().indexOf("html")>-1){
                array2.add(array[i]);
                }        
            }
            Collections.sort(array2); //按名称排序
    return array2;
    }
        
        public static void getPhotoHtml(String path) { //解析本地的html 
        List<File> array = listHtmlFiles2(path);
            //循环读取并解析这些文件
            for(int i=0; i<array.size(); i++){
                try{
                    //文件名字
                    System.out.println("正在解析网址:" + array.get(i).getName()+"!");
                    //下面开始解析本地的html
                    Document doc = Jsoup.parse(array.get(i), "gb2312"); 
                    Elements links = doc.getElementsByClass("jc-article");//分离出class="jc-article"的所有东西
                    for (Element link : links) {                    
                        Elements links3 = link.getElementsByTag("img");//得到<td>...</td>里面的内容
                        for (Element element3 : links3) {
                                String linkText2 = element3.attr("src");//得到<th>...</th>里面的内容
                                PhotoHtmlList.add(linkText2);
                            } 
    }
                    System.out.println(array.get(i).getName()+"解析完毕!");
                 } catch (Exception e) {
                        System.out.println("网址:" + array.get(i).getName() + "解析出错");
                        e.printStackTrace();
                        continue;
                    }
            }
    //        for (String string:PhotoHtmlList) {
    // System.out.println(string);
    // }
        }
        
        public static void DownloadPhoto(List<String> PhotoHtmlList) throws IOException { //下载图片
        for (int i = 0; i < PhotoHtmlList.size(); i++) {
        String strUrl = PhotoHtmlList.get(i);
            //构造URL
            URL url = new URL(strUrl);


            //构造连接
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();


            //打开连接
            conn.connect();
            //打开这个网站的输入流
            InputStream inStream = conn.getInputStream();


            //用这个做中转站 ,把图片数据都放在了这里,再调用toByteArray()即可获得数据的byte数组
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            //用这个是很好的,不用一次就把图片读到了文件中
            //要是需要把图片用作其他用途呢?所以直接把图片的数据弄成一个变量,十分有用
            //相当于操作这个变量就能操作图片了


            byte [] buff = new byte[1024]; //网址图片较小,1024Byte足够了
            //1024Byte=1KB,分配1KB的缓存
            //这个就是循环读取,是一个临时空间,多大都没关系
            //byte[]的大小,说明你一次操作最大字节是多少
            int len = 0;        
            while((len=inStream.read(buff))!=-1){//读取图片数据
            outStream.write(buff,0,len);
            }
            inStream.close();
            outStream.close();
            //把图片数据填入文件中
            File file = new File(timeList.get(i)+".jpg");


            FileOutputStream op = new FileOutputStream(file);
            op.write(outStream.toByteArray());
            op.close();
    }
        }
        
        public static void main(String[] args) throws ParseException, IOException, InterruptedException {
        SpiderXlggService ss = new SpiderXlggService();
        ss.getAllUrlList();
        ReadAllHtml rt = ss.new ReadAllHtml("爬取所有销量公告!");
        rt.start();
        try {
        rt.join(); //保证网页读取完毕
        } catch (InterruptedException e) {
        e.printStackTrace();
         }
        String path = "D:\\xlh\\1zhangliang\\mgr后台项目\\bd_internal_api\\src\\";
        getLocalhtml(path); //解析路径下的所有html
        matchHtml(); //匹配需要提取的html
        writeExcel(path); //将需提取的html保存到excel    
        deleteHtml(path); //删除所有html文件
       
        ReadNeedHtml rt2 = ss.new ReadNeedHtml("爬取所需销量公告!");
        rt2.start();
        try {
        rt2.join(); //保证网页读取完毕
        } catch (InterruptedException e) {
        e.printStackTrace();
         }
        getPhotoHtml(path);
        DownloadPhoto(PhotoHtmlList);
        deleteHtml(path); //删除所有html文件
        }

    }

    展开全文
  • Java爬取网页

    2015-08-17 21:19:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
    public static void main(String[] args){    
    	NodeList rt= getNodeList("http://www.ip138.com:8080/search.asp"); 
    	System.out.println(rt.toHtml());
    }   
    
    public static NodeList getNodeList(String url){
    	Parser parser = null;
    	HtmlPage visitor = null;
    	try {
    		parser = new Parser(url);
    	        parser.setEncoding("UTF-8");
    	        visitor = new HtmlPage(parser);
    	        parser.visitAllNodesWith(visitor);
    	} catch (ParserException e) {
    	        e.printStackTrace();
    	}
    	NodeList nodeList = visitor.getBody();
    	return nodeList;
    }
    

    ###运行结果 这里写图片描述

    转载于:https://my.oschina.net/alarm1673/blog/493672

    展开全文
  • java爬取网页内容

    2020-03-24 15:34:40
    java爬取网页内容主要使用jsoup工具 maven依赖: <!--https://mvnrepository.com/artifact/org.jsoup/jsoup--> <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup<...

    java爬取网页内容主要使用jsoup工具

    maven依赖:

    <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
    <dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.11.3</version>
    </dependency>

    jsoup介绍:

     jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,
     可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据

    主要功能:

     1)从一个URL,文件或字符串中解析HTML
        2)使用DOM或CSS选择器来查找、取出数据
        3)可操作HTML元素、属性、文本
        注意:jsoup是基于MIT协议发布的,可放心使用于商业项目

    简单使用方法:

    Document doc = Jsoup.connect("https://www.tianqi.com/chinacity.html").get();
            Elements citybox = doc.select(".citybox a");
            Elements atag=citybox.tagName("a");
            StringBuilder sb=new StringBuilder();
            String province="";
            for (int i=0;i<atag.size();i++){
                boolean isprovince=atag.get(i).attr("href").contains("province");
                if(isprovince){
                    province=atag.get(i).text();
                    continue;
                }
                String href=atag.get(i).attr("href").replace('/',' ').trim();
                String cityname=atag.get(i).text();
                String all=href.concat("-").concat(cityname).concat("|");
                sb.append(all);
            }

    其他使用方法详见:

    http://www.open-open.com/jsoup/
    展开全文
  • java爬取网页用到的一些jar

    热门讨论 2013-08-16 17:17:46
    java爬取网页用到的一些jar 具体的使用方法 看链接
  • Java爬取网页内容的简单例子

    万次阅读 2017-10-19 15:02:22
    Java爬取网页内容的简单例子
  • java爬取网页表格的例子(运行环境myeclipse)
  • java爬取网页内容 简单例子

    万次阅读 多人点赞 2015-08-19 11:26:27
    java爬取网页内容 简单例子(1)——使用正则表达式 【本文介绍】  爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去...
  • Java爬取网页

    2015-08-17 09:19:22
    之前用python爬取网页了,现在我们在用Java爬取网页,两者可以对比一下,个人感觉python语言简洁清新,比较好用.public static void main(String[] args){ NodeList rt= getNodeList(...
  • java爬取网页小说

    2021-04-06 14:20:19
    import org.jsoup.Jsoup;...import java.io.*; import java.net.URL; public class DownLoadUtil { public static void main(String[] args) { try { //创建一个输出流,将爬到的小说以txt形式保存...
  • java爬取网页内容 简单例子(1)——使用正则表达式https://www.cnblogs.com/xiaoMzjm/p/3894805.html
  • 爬取网页数据代码 解析代码 解析介绍 完整代码 介绍 1.爬取通过org.jsoup和HttpClients实现 2.爬取多页内容的时候进行循环,多页进行爬取 3.爬取来数据解析到jsonoup 4.取回数据使用文件保存直接保存到...
  • Java爬取网页数据

    2021-04-26 21:42:16
    import java.net.URL; public class JavaReptile { private String NewUrl; public static void main(String[] args) throws Exception{ //创建对象 JavaReptile reptile = new JavaReptile(); //调用相关的方法 ...
  • java 爬取网页内容

    2021-02-01 14:52:38
    private static String url = "路径"; private static String blogName = "路径后边所配参数"; public static void main(String[] args) { getArticleListFromUrl(url+"/" + blogName); System.out.println();...
  • JAVA爬取网页邮箱

    2019-09-23 02:34:36
    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.Malfor...
  • JAVA爬取网页内容

    2019-11-20 17:10:31
    爬取网页数据 GetCSS.java package cn . carwler . test ; import org . apache . http . HttpEntity ; import org . apache . http . HttpResponse ; import org . apache . http . client . ...
  • java爬取网页数据

    2018-03-30 23:06:00
    最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码: 原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容 1.首先是根据网址...
  • 爬取网页数据的demo 1.引入依赖jsoup <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,189
精华内容 475
关键字:

java爬取网页

java 订阅