精华内容
下载资源
问答
  • 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(); //调用相关的方法 ...

    1、导入依赖

            <!-- jSoup -->
            <dependency>
                <groupId>org.jsoup</groupId>
                <artifactId>jsoup</artifactId>
                <version>1.10.2</version>
            </dependency>
    

    2、源代码

    import org.jsoup.Jsoup;
    import org.jsoup.nodes.Document;
    import org.jsoup.nodes.Element;
    import org.jsoup.select.Elements;
    
    import java.net.URL;
    
    public class JavaReptile {
    
        private String NewUrl;
    
        public static void main(String[] args) throws Exception{
            //创建对象
            JavaReptile reptile = new JavaReptile();
            //调用相关的方法
            String n_url = reptile.getNewHistory("http://xxx");  //获取最新的内容
            reptile.getHistoryText(n_url);   //获取最新的内容
            reptile.getAllHistory("http://xxx");  //获取所有链接
    
        }
    
        /**
         * 获取最新的
         * @throws Exception
         */
        public String getNewHistory(String url) throws Exception{
            //解析网页
            Document document = Jsoup.parse(new URL(url),30000);
            //根据class来获取文档
            Elements elements = document.getElementsByClass("showMoreNChildren");
            //遍历这个文档
            for (Element el: elements) {
                //获取“a”标签下的第1个“href”里的内容
                NewUrl = el.getElementsByTag("a").eq(0).attr("href");
                System.out.println(NewUrl);
            }
            return NewUrl;
        }
    
        /**
         * 获取最新的内容
         */
        public void getHistoryText(String url)throws Exception{
            //解析网页
            Document document = Jsoup.parse(new URL(url),30000);
            //根据class来获取文档
            Elements title = document.getElementsByClass("big_title");
            System.out.println(title.text());
            //根据id来获取文档内容
            Element content = document.getElementById("font_area");
            //根据 p 标签来获取文档内容
            Elements contents_text = content.getElementsByTag("p");
            //遍历获取
            for (Element el_text: contents_text) {
                String text = el_text.text();
                System.out.println(text);
            }
        }
    
        /**
         * 获取所有
         */
        public void getAllHistory(String url) throws Exception{
            //解析网页
            Document document = Jsoup.parse(new URL(url),30000);
            //根据class来获取文档
            Elements elements = document.getElementsByClass("maR0");
            //遍历获取
            for (Element el: elements) {
                String href = el.getElementsByTag("a").eq(0).attr("href");
                System.out.println(href);
            }
        }
    }
    
    展开全文
  • 最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码:原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容1.首先是根据网址下载...

    最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码:

    原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容

    1.首先是根据网址下载源代码:

    /*** 根据网址和编码下载源代码

    *@paramurl 目标网址

    *@paramencoding 编码

    *@return

    */

    public staticString getHtmlResourceByURL(String url,String encoding){//存储源代码容器

    StringBuffer buffer = newStringBuffer();

    URL urlObj= null;

    URLConnection uc= null;

    InputStreamReader isr= null;

    BufferedReader br=null;try{//建立网络连接

    urlObj = newURL(url);//打开网络连接

    uc =urlObj.openConnection();//建立文件输入流

    isr = newInputStreamReader(uc.getInputStream(),encoding);

    InputStream is=uc.getInputStream();//建立文件缓冲写入流

    br = newBufferedReader(isr);

    FileOutputStream fos= new FileOutputStream("F:\\java-study\\downImg\\index.txt");//建立临时变量

    String temp = null;while((temp = br.readLine()) != null){

    buffer.append(temp+ "\n");

    }//fos.write(buffer.toString().getBytes());//fos.close();

    } catch(MalformedURLException e) {

    e.printStackTrace();

    System.out.println("网络不给力,请检查网络设置。。。。");

    }catch(IOException e){

    e.printStackTrace();

    System.out.println("你的网络连接打开失败,请稍后重新尝试!");

    }finally{try{

    isr.close();

    }catch(IOException e) {

    e.printStackTrace();

    }

    }returnbuffer.toString();

    }

    2.根据下载源代码解析数据,获取你想要的内容,这里我获取的是图片,你也可以获取贴吧里邮箱,电话号码等

    /*** 获取图片路劲

    *@paramurl 网络路径

    *@paramencoding 编码*/

    public static voiddownImg(String url,String encoding){

    String resourceByURL=getHtmlResourceByURL(url, encoding);//2.解析源代码,根据网络图像地址,下载到服务器

    Document document =Jsoup.parse(resourceByURL);//获取页面中所有的图片标签

    Elements elements = document.getElementsByTag("img");for(Element element:elements){//获取图像地址

    String src = element.attr("src");//包含http开头

    if (src.startsWith("http") && src.indexOf("jpg") != -1) {

    getImg(src,"F:\\java-study\\downImg");

    }

    }

    }

    3.根据获取的图片路径,下载图片,这里我下载的是携程网的内容

    /*** 下载图片

    *@paramimgUrl 图片地址

    *@paramfilePath 存储路劲

    **/

    public static voidgetImg(String imgUrl,String filePath){

    String fileName= imgUrl.substring(imgUrl.lastIndexOf("/"));try{//创建目录

    File files = newFile(filePath);if (!files.exists()) {

    files.mkdirs();

    }//获取地址

    URL url = newURL(imgUrl);//打开连接

    HttpURLConnection connection =(HttpURLConnection) url.openConnection();//获取输入流

    InputStream is =connection.getInputStream();

    File file= new File(filePath +fileName);//建立问价输入流

    FileOutputStream fos = newFileOutputStream(file);int temp = 0;while((temp = is.read()) != -1){

    fos.write(temp);

    }

    is.close();

    fos.close();

    }catch(Exception e) {

    e.printStackTrace();

    }

    }

    最后是调用过程

    public static voidmain(String[] args) {//1.根据网址和页面编码集获取网页源代码

    String encoding = "gbk";

    String url= "http://vacations.ctrip.com/";//2.解析源代码,根据网络图像地址,下载到服务器

    downImg(url, encoding);

    }

    总结:根据上面的实现的简单数据爬取,存在着一些问题,我爬取的旅游页面有很多图片,根据img属性获取其src中的地址,从而下载该图片,但是该页面有很多图片,结果自己却只能爬到一小部分,如下图:

    07255c02fdfcd5185d685ce8d30949ba.png

    我将下载的源代码写入文件,和原网页中做对比,基本上页面旅游的图片一张没有,源代码中也没有,不知道为什么,请求广大网友的解答

    展开全文
  • java爬取网页数据

    2018-03-30 23:06:00
    最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码: 原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容 1.首先是根据网址...

    最近使用java实现了一个简单的网页数据抓取,下面是实现原理及实现代码:

    原理:使用java.net下面的URL对象获取一个链接,下载目标网页的源代码,利用jsoup解析源代码中的数据,获取你想要的内容

    1.首先是根据网址下载源代码:

    /**
         * 根据网址和编码下载源代码
         * @param url 目标网址
         * @param encoding 编码
         * @return
         */
        public static String getHtmlResourceByURL(String url,String encoding){
            
            //存储源代码容器
            StringBuffer buffer = new StringBuffer();
            URL urlObj = null;
            URLConnection uc = null;
            InputStreamReader isr = null;
            BufferedReader br =null;
            try {
                //建立网络连接
                urlObj = new URL(url);
                //打开网络连接
                uc = urlObj.openConnection();
                //建立文件输入流
                isr = new InputStreamReader(uc.getInputStream(),encoding);
                InputStream is = uc.getInputStream();
                //建立文件缓冲写入流
                br = new BufferedReader(isr);
                FileOutputStream fos = new FileOutputStream("F:\\java-study\\downImg\\index.txt");
                
                //建立临时变量
                String temp = null;
                while((temp = br.readLine()) != null){
                    buffer.append(temp + "\n");
                }
    //            fos.write(buffer.toString().getBytes());
    //            fos.close();
            } catch (MalformedURLException e) {
                e.printStackTrace();
                System.out.println("网络不给力,请检查网络设置。。。。");
            }catch (IOException e){
                e.printStackTrace();
                System.out.println("你的网络连接打开失败,请稍后重新尝试!");
            }finally {
                try {
                    isr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            return buffer.toString();
        }

    2.根据下载源代码解析数据,获取你想要的内容,这里我获取的是图片,你也可以获取贴吧里邮箱,电话号码等

    /**
         * 获取图片路劲
         * @param url 网络路径
         * @param encoding 编码
         */
        public static void downImg(String url,String encoding){
            String resourceByURL = getHtmlResourceByURL(url, encoding);
            //2.解析源代码,根据网络图像地址,下载到服务器
            Document document = Jsoup.parse(resourceByURL);        
            //获取页面中所有的图片标签
            Elements elements = document.getElementsByTag("img");
            
            for(Element element:elements){
                //获取图像地址
                String src = element.attr("src");
                //包含http开头
                if (src.startsWith("http") && src.indexOf("jpg") != -1) {
                    getImg(src, "F:\\java-study\\downImg");
                }
            }
        }

    3.根据获取的图片路径,下载图片,这里我下载的是携程网的内容

    /**
         * 下载图片
         * @param imgUrl 图片地址
         * @param filePath 存储路劲
         * 
         */
        public static void getImg(String imgUrl,String filePath){
            
            String fileName = imgUrl.substring(imgUrl.lastIndexOf("/"));
            
            try {
                //创建目录
                File files = new File(filePath);
                if (!files.exists()) {
                    files.mkdirs();
                }
                //获取地址
                URL url = new URL(imgUrl);
                //打开连接
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                //获取输入流
                InputStream is = connection.getInputStream();
                File file = new File(filePath + fileName);
                //建立问价输入流
                FileOutputStream fos = new FileOutputStream(file);
                
                int temp = 0;
                while((temp = is.read()) != -1){
                    fos.write(temp);
                }
                is.close();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    最后是调用过程

    public static void main(String[] args) {
            
            //1.根据网址和页面编码集获取网页源代码
            String encoding = "gbk";
            String url = "http://vacations.ctrip.com/";
            //2.解析源代码,根据网络图像地址,下载到服务器
            downImg(url, encoding);
            
        }

    总结:根据上面的实现的简单数据爬取,存在着一些问题,我爬取的旅游页面有很多图片,根据img属性获取其src中的地址,从而下载该图片,但是该页面有很多图片,结果自己却只能爬到一小部分,如下图:

    我将下载的源代码写入文件,和原网页中做对比,基本上页面旅游的图片一张没有,源代码中也没有,不知道为什么,请求广大网友的解答

    转载于:https://www.cnblogs.com/linlinyu/p/8679216.html

    展开全文
  • 【本文介绍】爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好。这里只是举个例子...

    【本文介绍】

    爬取别人网页上的内容,听上似乎很有趣的样子,只要几步,就可以获取到力所不能及的东西,例如呢?例如天气预报,总不能自己拿着仪器去测吧!当然,要获取天气预报还是用webService好。这里只是举个例子。话不多说了,上看看效果吧。

    【效果】

    从图中可用看出,今天(6日)的天气。我们就以这个为例,获取今天的天气吧!

    2ca1052b82ebbac839c90026ed255309.png

    最终后台打印出:

    今天:6日

    天气:雷阵雨

    温度:26°~34°

    风力:微风

    【思路】

    1、通过url获取输入流————2、获取网页html代码————3、用正则表达式抽取有用的信息————4、拼装成想要的格式

    其实最难的一点事第3点,如果正则表示式不熟,基本上在这一步就会挂掉了——例如我T_T。下面为了抽取到正确的数据,我匹配了多次,如果能一次匹配的话,那代码量就少多了!

    【代码】

    8f900a89c6347c561fdf2122f13be562.png

    961ddebeb323a10fe0623af514929fc1.png

    1 packagecom.zjm.www.test;2

    3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStream;6 importjava.io.InputStreamReader;7 importjava.net.HttpURLConnection;8 importjava.net.URL;9 importjava.util.regex.Matcher;10 importjava.util.regex.Pattern;11

    12 /**

    13 * 描述:趴取网页上的今天的天气14 *@authorzjm15 * @time 2014/8/616 */

    17 public classTodayTemperatureService {18

    19 /**

    20 * 发起http get请求获取网页源代码21 *@paramrequestUrl String 请求地址22 *@returnString 该地址返回的html字符串23 */

    24 private staticString httpRequest(String requestUrl) {25

    26 StringBuffer buffer = null;27 BufferedReader bufferedReader = null;28 InputStreamReader inputStreamReader = null;29 InputStream inputStream = null;30 HttpURLConnection httpUrlConn = null;31

    32 try{33 //建立get请求

    34 URL url = newURL(requestUrl);35 httpUrlConn =(HttpURLConnection) url.openConnection();36 httpUrlConn.setDoInput(true);37 httpUrlConn.setRequestMethod("GET");38

    39 //获取输入流

    40 inputStream =httpUrlConn.getInputStream();41 inputStreamReader = new InputStreamReader(inputStream, "utf-8");42 bufferedReader = newBufferedReader(inputStreamReader);43

    44 //从输入流读取结果

    45 buffer = newStringBuffer();46 String str = null;47 while ((str = bufferedReader.readLine()) != null) {48 buffer.append(str);49 }50

    51 } catch(Exception e) {52 e.printStackTrace();53 } finally{54 //释放资源

    55 if(bufferedReader != null) {56 try{57 bufferedReader.close();58 } catch(IOException e) {59 e.printStackTrace();60 }61 }62 if(inputStreamReader != null){63 try{64 inputStreamReader.close();65 } catch(IOException e) {66 e.printStackTrace();67 }68 }69 if(inputStream != null){70 try{71 inputStream.close();72 } catch(IOException e) {73 e.printStackTrace();74 }75 }76 if(httpUrlConn != null){77 httpUrlConn.disconnect();78 }79 }80 returnbuffer.toString();81 }82

    83 /**

    84 * 过滤掉html字符串中无用的信息85 *@paramhtml String html字符串86 *@returnString 有用的数据87 */

    88 private staticString htmlFiter(String html) {89

    90 StringBuffer buffer = newStringBuffer();91 String str1 = "";92 String str2 = "";93 buffer.append("今天:");94

    95 //取出有用的范围

    96 Pattern p = Pattern.compile("(.*)(

    )(.*?)()(.*)");97 Matcher m =p.matcher(html);98 if(m.matches()) {99 str1 = m.group(3);100 //匹配日期,注:日期被包含在

    101 p = Pattern.compile("(.*)(

    )(.*?)(

    )(.*)");102 m =p.matcher(str1);103 if(m.matches()){104 str2 = m.group(3);105 buffer.append(str2);106 buffer.append("\n天气:");107 }108 //匹配天气,注:天气被包含在

    109 p = Pattern.compile("(.*)(

    )(.*?)(

    )(.*)");110 m =p.matcher(str1);111 if(m.matches()){112 str2 = m.group(5);113 buffer.append(str2);114 buffer.append("\n温度:");115 }116 //匹配温度,注:温度被包含在

    117 p = Pattern.compile("(.*)(

    )(.*?)()(.*)");118 m =p.matcher(str1);119 if(m.matches()){120 str2 = m.group(3);121 buffer.append(str2);122 buffer.append("°~");123 }124 p = Pattern.compile("(.*)(

    )(.*?)()(.*)");125 m =p.matcher(str1);126 if(m.matches()){127 str2 = m.group(3);128 buffer.append(str2);129 buffer.append("°\n风力:");130 }131 //匹配风,注:

    132 p = Pattern.compile("(.*)()(.*?)()(.*)");133 m =p.matcher(str1);134 if(m.matches()){135 str2 = m.group(3);136 buffer.append(str2);137 }138 }139 returnbuffer.toString();140 }141

    142 /**

    143 * 对以上两个方法进行封装。144 *@return

    145 */

    146 public staticString getTodayTemperatureInfo() {147 //调用第一个方法,获取html字符串

    148 String html = httpRequest("http://www.weather.com.cn/html/weather/101280101.shtml");149 //调用第二个方法,过滤掉无用的信息

    150 String result =htmlFiter(html);151

    152 returnresult;153 }154

    155 /**

    156 * 测试157 *@paramargs158 */

    159 public static voidmain(String[] args) {160 String info =getTodayTemperatureInfo();161 System.out.println(info);162 }163 }

    View Code

    【详解】

    34-49行:通过url获取网页的源码,没什么好说的。

    96行:在网页上按F12,查看"今天"的html代码,发现如下图,所以我们第一步就是要过滤掉除这一段html代码外的东西。

    (.*)(

    )(.*?)()(.*)这个正则表达式,很容易看出可以分为下面5组:

    (.*)                           :匹配除换行符外任意东西0-N次

    (

    )    :匹配中间那段heml代码一次

    (.*?)                         : .*?为匹配的懒惰模式,意思是匹配除换行符外任意东西尽可能少次

    (

    )                       :匹配中间那段html代码一次

    (.*):匹配除换行符外任意东西0-N次

    这样,我们就可用m.group(3)拿到匹配中间(.*?)的那一串代码了。即我们需要的“今天”的天气的代码。

    708739162058bd3eaf7fbde793efad48.png

    101行:中间那一段代码拿出来后如下图所示、还有很多无用的标签。我们要想办法继续除去。方法同上。

    eeca499afc389d5de58bdf3cc866a0de.png

    106行:手动拼接上我们需要的字符串。

    经过以上的处理,就完成了一个简单的爬取啦。

    中间正则表达式部分最不满意,各路网友如果有好的建议麻烦留下宝贵的评论,感激不尽~

    展开全文
  • 一、环境准备Python环境和Pycharm编辑器同时本次爬取网页信息需要使用requests和lxml两个库,若无,需安装。以lxml为例安装方式如下:<1>运行-Cmd后,输入pip install lxml,若成功安装可不进行下一步。<2&...
  • 爬取网页数据代码 解析代码 解析介绍 完整代码 介绍 1.爬取通过org.jsoup和HttpClients实现 2.爬取多页内容的时候进行循环,多页进行爬取 3.爬取来数据解析到jsonoup 4.取回数据使用文件保存直接保存到...
  • 爬取网页数据的demo 1.引入依赖jsoup <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency> ...
  • 简单java爬取网页数据

    2019-10-16 19:43:46
    静态爬取 public class HttpUtil { public static Document get(String url, String charset) throws IOException { String userAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) " + ...
  • 按照一定规则,指的是爬虫程序需要解析网页的dom结构,针对dom结构爬取自己感兴趣的数据。(图1)这就是一个网页源码的dom结构,我们需要一级一级指定抓取的标签,如下图:(图2)图2是java程序使用webmagic框架开发的爬虫...
  • 事实上,市面上通用的搜索引擎是存在一定局限性的:搜索引擎返回的结果包含大量用户不关心的网页基于关键字的搜索引擎缺乏语义理解,导致反馈信息不准确无法处理非结构性数据,尤其是图片。音视...
  • 最近有一个任务抓取如下图的网页数据 要获取前一天的数据进行翻页抓取数据并存入数据库   如果就只是抓取当前页的数据 没有条件和翻页数据 这个就比较简单了 但是要选取前一天的数据,还有分页数据 一开始...
  • 最近接触了下java的爬虫,文本信息爬完了,就想看看图片怎么爬,于是就研究了一下,案例爬学校的官网 pom依赖 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <dependency> <...
  • import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import org.apache.http.HttpStatus; import org.apache....
  • 先说下背景,前几天老哥让帮忙从网上抓点数据,因为他是做食品添加剂的推广工作的,所以需要知道有哪些工厂或者厂家可能需要食品添加剂,然后他给了我一个网址----某食品药品许可公示平台。既然是公示平台,数据应该...
  • 引言随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称“最火行业”:大数据、数据分析、数据挖掘、机器学习、人工智能,这五门行业各有不同又互有穿插。近几年在实现信息科技化的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 542
精华内容 216
关键字:

java爬取网页数据

java 订阅