精华内容
下载资源
问答
  • 利用java定时爬取网页数据,完整爬取数据源码及jar,利用java定时爬取网页数据,可自行导入到本地测试,仅供参考
  • java爬取网页数据

    2021-03-06 03:07:49
    最近使用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

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

    展开全文
  • 原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了?浏览器请求数据方式:浏览器向服务器的api(例如这样的字符...

    原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了?

    浏览器请求数据方式:浏览器向服务器的api(例如这样的字符串:http://api.qingyunke.com/api.php?key=free&appid=0&msg=关键词)发送请求,服务器返回json,然后解析该json,就得到请求数据了

    同理:用Python向api发送请求,获得json,解析json,得到数据

    即关键在于得到api

    api获取:

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTMyNDcxODktMTExNjQyNzg3NS5wbmc=.jpg

    将鼠标放在上图图示位置,将显示该用户的一些信息,这些信息就是动态加载出来的。当鼠标放在该位置时,浏览器向服务器api发出请求,得到json,再解析便得到下图所示数据

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTQzMjY3ODktMTQ1MDA4MTQyMC5wbmc=.jpg

    在该网页反键选择检查源代码,按图示点开选项:

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTQ2MzMxODAtMTQ0MzEyNzEwNi5wbmc=.jpg

    然后将鼠标移动到网页界面用户上(箭头位置),会发现右边多出两个请求信息,如图:

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTUxMDQ4ODAtMzkxODcyMjQ5LnBuZw==.jpg

    点击下面一个,红色方框内的链接,就是要找的api接口

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNTU0NDE5NTQtMTE1NTkzNjEyMi5wbmc=.jpg

    直接用浏览器打开该api即可看到json,如下图

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjAzNTYyMjQtMTg4MTcwNTY2OC5wbmc=.jpg

    下面用python代码请求该api并解析

    import requests

    import json

    #api

    url='https://www.zhihu.com/api/v4/members/wisphilo?include=allow_message%2Cis_followed%2Cis_following%2Cis_org%2Cis_blocking%2Cemployments%2Canswer_count%2Cfollower_count%2Carticles_count%2Cgender%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics'

    #header的目的是模拟请求,因为该api设置了反爬取

    header={

    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36'

    }

    doc=requests.get(url,headers=header)#发起请求

    doc.encoding='utf-8'#设置编码为utf-8

    data=json.loads(doc.text)#将json字符串转为json

    #根据位置查找数据

    print('用户名:',data.get('name'))

    print('个人描述:',data.get('headline'))

    print('职务:'+data.get('employments')[0].get('job').get('name'))

    print('回答:',data.get('answer_count'))

    print('文章:',data.get('articles_count'))

    print('关注者:',data.get('follower_count'))

    另外查找数据最好用在线json格式化再查找,不然很难看出自己要的数据在哪eg:

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjIwMjc3NzktMzY3NzM1NTU4LnBuZw==.jpg

    一般网页的api都有规律可寻,用for循环控制变换字符即可实现自动爬取

    上述代码运行结果:

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjIzMDc5MDktODUwNDYwMDcyLnBuZw==.jpg

    和该界面对照

    L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vaS1iZXRhLzE3ODU2MzgvMjAxOTEyLzE3ODU2MzgtMjAxOTEyMDYxNjI1MTMyNDQtNTQ3NTg2MTc1LnBuZw==.jpg

    以上

    利用selenium并使用gevent爬取动态网页数据

    首先要下载相应的库 gevent协程库:pip install gevent selenium模拟浏览器访问库:pip install selenium selenium库相应驱动配置  https: ...

    python爬取动态网页2,从JavaScript文件读取内容

    import requests import json head = {"user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) ...

    Python:将爬取的网页数据写入Excel文件中

    Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...

    selenium抓取动态网页数据

    1.selenium抓取动态网页数据基础介绍 1.1 什么是AJAX AJAX(Asynchronouse JavaScript And XML:异步JavaScript和XML)通过在后台与服务器进 ...

    R语言爬取动态网页之环境准备

    在R实现pm2.5地图数据展示文章中,使用rvest包实现了静态页面的数据抓取,然而rvest只能抓取静态网页,而诸如ajax异步加载的动态网页结构无能为力.在R语言中,爬取这类网页可以使用RSele ...

    python爬取某个网页的图片-如百度贴吧

    python爬取某个网页的图片-如百度贴吧 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用告诉我 #coding:utf-8 import urllib imp ...

    Python 爬取单个网页所需要加载的地址和CSS、JS文件地址

    Python 爬取单个网页所需要加载的URL地址和CSS.JS文件地址 通过学习Python爬虫,知道根据正式表达式匹配查找到所需要的内容(标题.图片.文章等等).而我从测试的角度去使用Python爬 ...

    利用Python爬取朋友圈数据,爬到你开始怀疑人生

    人生最难的事是自我认知,用Python爬取朋友圈数据,让我们重新审视自己,审视我们周围的圈子. 文:朱元禄(@数据分析-jacky) 哲学的两大问题:1.我是谁?2.我们从哪里来? 本文 jacky试 ...

    爬虫(三)通过Selenium + Headless Chrome爬取动态网页

    一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...

    随机推荐

    lucene 使用注意

    1.建立索引时,忘记writer.close(); 结果: 正常结果:

    About Wisdom

    All human wisdom is summed up in two words --- wait and hope.人类所有的智慧可以归结为两个词---等待和希望. —— Alexandre D ...

    ADO.NET——获取output 和 return值

    程序代码 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @b //GO SqlConnection ...

    python学习之路-11 多线程、多进程、协程

    python内置队列模块 queue queue的四种队列 q = queue.Queue() # 先进先出队列 q = queue.LifoQueue() # 后进先出队列 q = queue.Pr ...

    android系统的图片资源

    使用系统的图片资源的好处有,一个是美工不需要重复的做一份已有的图片了,可以节约不少工时:另一个是能保证我们的应用程序的风格与系统一致. 1.引用方式 在源代码*.Java中可以进入如下方式引用: my ...

    在dotnetcore的MVC项目中,创建支持 vue.js 的最小工程模板

    网上Vue模板不是最新的,我自己做了一个最新的支持 Vue.js 的最小工程模板,方便大家从 Hello world. 入门, 在 VS2017 里学习,并扩展出自己的项目. 下面是创建步骤: 1.在 ...

    js switch 用法

    //获取星期 //例子1 var day=new Date().getDay(); switch (day) { : x="Today it's Saturday"; break; ...

    js 序列化

    Python 序列化 字符串 = json.dumps(对象)  对象转字符串 对象 = json.loads(字符串)   字符串转对象 Javascript 字符串 = JSON.stringif ...

    更改linux下文件目录权限、拥有者及用户组

    在linux中的每个用户必须属于一个组,不能独立于组外.在linux中每个文件有所有者.所在组.其它组的概念 - 所有者 - 所在组 - 其它组 - 改变用户所在的组 所有者 一般为文件的创建者,谁创 ...

    展开全文
  • java爬虫系列(二)——爬取动态网页

    万次阅读 热门讨论 2018-01-01 15:59:40
    准备工作 项目地址 网页解析工具地址 启动网页解析器 根据系统选择所需文件 ...新手的话推荐使用seimiagent+seimicrawler的爬取方式,非常容易上手,轻松爬取动态网页,目测初步上手10分钟以内...

    准备工作

    新手的话推荐使用seimiagent+seimicrawler的爬取方式,非常容易上手,轻松爬取动态网页,目测初步上手10分钟以内吧。

    项目地址

    https://github.com/a252937166/seimicrawler

    网页解析工具地址

    https://github.com/a252937166/seimiagent

    启动网页解析器

    根据系统选择所需文件

    下载好seimiagent,根据自己的操作系统,如果是windows,就用seimiagent.exe,如果是linux,就选择seimiagentmac版本暂时还没有,我的话一般会把seimiagent放在自己的linux服务器上。

    指定端口号启动工具

    linux为例,进入文件所在目录,指定8000端口,./seimiagent -p 8000,即可启动。
    这里写图片描述

    图(1)

    项目配置

    seimi.properties

    redis.host=127.0.0.1
    redis.port=6379
    redis.password=
    database.driverClassName=com.mysql.jdbc.Driver
    database.url=
    database.username=
    database.password=
    seimiAgentHost=127.0.0.1
    seimiAgentPort=8000

    找到此配置文件,修改seimiAgentHostseimiAgentPort为自己的地址信息。

    SeimiAgentDemo.java

    package com.ouyang.crawlers;
    
    import cn.wanghaomiao.seimi.annotation.Crawler;
    import cn.wanghaomiao.seimi.def.BaseSeimiCrawler;
    import cn.wanghaomiao.seimi.struct.Request;
    import cn.wanghaomiao.seimi.struct.Response;
    import cn.wanghaomiao.xpath.model.JXDocument;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.beans.factory.annotation.Value;
    
    /**
     * 这个例子演示如何使用SeimiAgent进行复杂动态页面信息抓取
     * @author 汪浩淼 et.tw@163.com
     * @since 2016/4/14.
     */
    @Crawler(name = "seimiagent")
    public class SeimiAgentDemo extends BaseSeimiCrawler{
    
        /**
         * 在resource/config/seimi.properties中配置方便更换,当然也可以自行根据情况使用自己的统一配置中心等服务
         */
        @Value("${seimiAgentHost}")
        private String seimiAgentHost;
    
        @Value("${seimiAgentPort}")
        private int seimiAgentPort;
    
        @Override
        public String[] startUrls() {
            return new String[]{"https://www.baidu.com"};
        }
    
        @Override
        public String seimiAgentHost() {
            return this.seimiAgentHost;
        }
    
        @Override
        public int seimiAgentPort() {
            return this.seimiAgentPort;
        }
    
        @Override
        public void start(Response response) {
            Request seimiAgentReq = Request.build("http://manhua.fzdm.com/2/889/","getHtml")
                    .useSeimiAgent()
    //                告诉SeimiAgent针对这个请求是否使用cookie,如果没有设置使用当前Crawler关于cookie使用条件作为默认值。
    //                .setSeimiAgentUseCookie(true)
                    //设置全部load完成后给SeimiAgent多少时间用于执行js并渲染页面,单位为毫秒
                    .setSeimiAgentRenderTime(5000);
            push(seimiAgentReq);
        }
    
        /**
         * 打印网页信息
         * @param response
         */
        public void getHtml(Response response){
            try {
                System.out.println(response.getContent());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    找到这个demo文件,注意.useSeimiAgent(),这就是表示需要使用seimiagent来解析动态网页了,此外还可以设置cookieparammeta这些参数。
    我们使用getHtml()这个回调函数来打印网页信息,对比一下看看,有没有顺利解析成功。

    分析原网页代码

    我们使用chrome浏览器的network查看网页原始代码。
    这里写图片描述

    图(2)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" lang="utf-8">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="utf-8" />
    <meta content="all" name="robots" />
    <title>海贼王889话 风之动漫</title>
    <meta name="keywords" content="海贼王889话 " />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta http-equiv="Cache-Control" content="no-transform" />
    <meta http-equiv="Cache-Control" content="no-siteapp" />
    <meta name="applicable-device" content="pc,mobile" />
    <meta name="HandheldFriendly" content="true" /> 
    <meta property="og:title" content="海贼王889话"/>
    <meta property="og:type" content="book"/>
    <meta property="og:url" id="readurl" content="http://manhua.fzdm.com/2/889/" />
    
    <link rel="stylesheet" href="//static.fzdm.com/pure/pure-min.css">
    <!--[if lte IE 8]>
        <link rel="stylesheet" href="//static.fzdm.com/pure/grids-responsive-old-ie-min.css">
    <![endif]-->
    <!--[if gt IE 8]><!-->
        <link rel="stylesheet" href="//static.fzdm.com/pure/grids-responsive-min.css">
    <!--<![endif]-->
    <link rel="stylesheet" href="//static.fzdm.com/pure/fzdm.css">
    <link rel="icon" href="//static.fzdm.com/favicon.ico" mce_href="//static.fzdm.com/favicon.ico" type="image/x-icon">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <link rel="apple-touch-icon" href="//static.fzdm.com/apple-touch-icon-144x144.png" />
    
    <style>
    .logo {
        top: -2px;
        height: 70px;
        overflow: hidden;}
    
    .logo img{height:77px}
    #header {
      height: 70px;
    }
    #header ul {
      top: 8px;}
      .pure-menu.pure-menu-open, .pure-menu.pure-menu-horizontal li .pure-menu-children {
         text-align: left;
         height: 70px;
         background: none;
       /* border: 1px solid #b7b7b7; */
     }
    
    
    </style>
    
    <script>
    var _hmt = _hmt || [];
    (function() {
    var hm = document.createElement("script");
    hm.src = "//hm.baidu.com/hm.js?cb51090e9c10cda176f81a7fa92c3dfc";
    var s = document.getElementsByTagName("script")[0];
    s.parentNode.insertBefore(hm, s);
    })();
    </script>
    
    </head>
    <body>
        <!--[if lt IE9]>
        <script src="//static.fzdm.com/html5shiv.min.js"></script>
        <![endif]-->
    <script src="//static.fzdm.com/jquery-1.9.1.min.js?v=1"></script>
    <script src="//static.fzdm.com/fzdm.js?v=1"></script>
    <script src="//static.fzdm.com/u.js"></script>
    
    <script src="//dup.baidustatic.com/js/dm.js"></script>
    <div id="header">
    <div class="pure-g">
    <div class="pure-menu pure-menu-open pure-menu-horizontal">
    <div class="logo">
    <a href="//www.fzdm.com"><img src="//static.fzdm.com/css/logo.png" alt="风之动漫" /></a>
    </div>
    <ul>
    <li><a href="//www.fzdm.com/"> 首页</a></li>
    <li><a href="//news.fzdm.com/">动漫新闻</a></li>
    <li><a href="//manhua.fzdm.com/">在线漫画</a></li>
    <li><a href="//flash.fzdm.com/">动漫flash</a></li>
    
    </ul>
    
                </div>
                </div>
                </div>
            </div>
    
        <center>
    <!-- 广告位:顶部960*90 -->
    
    </center>
    
    <br>
    
    
    <br>
    <div id="weizhi">位置:<a href="//www.fzdm.com">首页</a> - <a href="../../">在线漫画</a> - <a href="../">海贼王</a> - 海贼王889话<h4 style="float:right;margin-right: 100px;"><a href="#comments">海贼王889话讨论区</a></h4></div>
    <div id="mh">
    <h1>海贼王889话</h1>
    
    <div id="mhimg0"><h2><a href="//manhua.fzdm.com/2/889/">《无法观看》请点击此处~</a></h2></div>
    
    
    <center>
    
    <div id="share">
    <div class="bdsharebuttonbox"><a href="#" class="bds_more" data-cmd="more">分享<strong>海贼王889话漫画</strong>到:</a><a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间">QQ空间</a><a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信">微信</a><a href="#" class="bds_sqq" data-cmd="sqq" title="分享到QQ好友">QQ好友</a><a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博">微博</a><a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博">腾讯</a><a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网">人人网</a><a href="#" class="bds_fbook" data-cmd="fbook" title="分享到Facebook">Facebook</a><a href="#" class="bds_baidu" data-cmd="baidu" title="分享到百度搜藏">百度搜藏</a><a href="#" class="bds_bdhome" data-cmd="bdhome" title="分享到百度新首页">百度首页</a><a class="bds_count" data-cmd="count"></a></div>
    </div>
    
    <div id="ad">
    <script src='//m.xmshqh.com/fz2.js'></script>
    </div>
    
    </center>
    <div class="navigation">
    <a href="index_0.html" id="mhona">第1页</a><a href="index_1.html">2</a><a href="index_2.html">3</a><a href="index_3.html">4</a><a href="index_4.html">5</a><a href="index_5.html">6</a><a href="index_6.html">7</a><a href="index_7.html">8</a><a href="index_8.html">9</a><a href="index_9.html">10</a><a href="index_10.html">11</a><a href="index_11.html">12</a><a href="index_12.html">13</a><a href="index_13.html">14</a><a href="index_14.html">15</a><a href="index_15.html">16</a><a href="index_16.html">17</a><a href='index_1.html' id="mhona">下一页</a></div>
    
    <br />
    <br />
    <script type="text/javascript">
            document.write('<a style="display:none!important" id="tanx-a-mm_10028503_120355_28042038"></a>');
            tanx_s = document.createElement("script");
            tanx_s.type = "text/javascript";
            tanx_s.charset = "gbk";
            tanx_s.id = "tanx-s-mm_10028503_120355_28042038";
            tanx_s.async = true;
            tanx_s.src = "//p.tanx.com/ex?i=mm_10028503_120355_28042038";
            tanx_h = document.getElementsByTagName("head")[0];
            if(tanx_h)tanx_h.insertBefore(tanx_s,tanx_h.firstChild);
    </script><script type="text/javascript">
            document.write('<a style="display:none!important" id="tanx-a-mm_10028503_120355_28058018"></a>');
            tanx_s = document.createElement("script");
            tanx_s.type = "text/javascript";
            tanx_s.charset = "gbk";
            tanx_s.id = "tanx-s-mm_10028503_120355_28058018";
            tanx_s.async = true;
            tanx_s.src = "//p.tanx.com/ex?i=mm_10028503_120355_28058018";
            tanx_h = document.getElementsByTagName("head")[0];
            if(tanx_h)tanx_h.insertBefore(tanx_s,tanx_h.firstChild);
    </script>
    <script type="text/javascript">
            document.write('<a style="display:none!important" id="tanx-a-mm_10028503_120355_28066012"></a>');
            tanx_s = document.createElement("script");
            tanx_s.type = "text/javascript";
            tanx_s.charset = "gbk";
            tanx_s.id = "tanx-s-mm_10028503_120355_28066012";
            tanx_s.async = true;
            tanx_s.src = "//p.tanx.com/ex?i=mm_10028503_120355_28066012";
            tanx_h = document.getElementsByTagName("head")[0];
            if(tanx_h)tanx_h.insertBefore(tanx_s,tanx_h.firstChild);
    </script>
    <br />
    
    
    <!-- <div id="comments"></div> -->
    
    
    <br><br>
    <script charset="gbk" src="//p.tanx.com/ex?i=mm_10028503_120355_41360495"></script><br /><br />
    <br />
    
    <br /><div id="weizhi">热门漫画导航: <a href='//manhua.fzdm.com/91/' target=_blank>美食的俘虏漫画</a> - <a href='//manhua.fzdm.com/7/ 'target=_blank>死神漫画</a>  - <a href='//manhua.fzdm.com/39/' target=_blank>进击的巨人漫画</a> - <a href='//manhua.fzdm.com/35/' target=_blank>家庭教师漫画</a> - <a href="//manhua.fzdm.com/27/" target=_blank>妖精的尾巴漫画</a>  - <a href="//manhua.fzdm.com/1/" target=_blank>火影忍者漫画</a>  - <a href='//manhua.fzdm.com/53/' target=_blank>黑子的篮球漫画</a>   - <a href='//manhua.fzdm.com/45/' target=_blank>恶魔奶爸漫画</a> - <a href='//manhua.fzdm.com/51/' target=_blank>史上最强弟子兼一漫画</a> - <a href='//manhua.fzdm.com/74/' target=_blank>王者天下漫画</a> - <a href='//manhua.fzdm.com/56/' target=_blank>七原罪漫画</a> - <a href='//manhua.fzdm.com/141/' target=_blank>暗杀教室漫画</a></div>
    <div id="mhimg1"></div>
    <script type="text/javascript">
    
    var mhurl = "2017/12/22064917941533.jpg";
    var mhss = getCookie("picHost");
    if (mhss == "") {
        mhss = "p1.xiaoshidi.net";
    }
    if (mhurl.indexOf("2015") != -1 || mhurl.indexOf("2016") != -1|| mhurl.indexOf("2017") != -1 || mhurl.indexOf("2018") != -1){
    
    }else{
        mhss = mhss.replace(/p1/,"p0");
    };
    
    var mhpicurl = mhss+"/"+mhurl;
    if (mhurl.indexOf("http") != -1){
        mhpicurl = mhurl;
    };
    function nofind(){
    
    var img=event.srcElement;
    
    img.src="http://p1.xiaoshidi.net/"+mhurl;
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    document.cookie = "picHost=0;path=/;domain=fzdm.com;expires="+exp.toGMTString();
    img.onerror=null;
    };
    $("#mhimg0").html('<a href="index_1.html"><img src="http://'+mhpicurl+'" id="mhpic" alt="海贼王889话" onerror="nofind();" /></a>');
    
    var mhurl1 = "2017/12/22064917942026.jpg";
    mhpicurl = mhss+"/"+mhurl1;
    $("#mhimg1").html('<img src="http://'+mhpicurl+'" width="0" height="0" id="mhpic1" />');
    
    </script>
    
    <br />
    <br />
    <br />
    <script>
    if (document.location.protocol == "http:"){
    window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"海贼王889话 风之动漫","bdUrl":"//manhua.fzdm.com/2/889/","bdDesc":"海贼王889话","bdMini":"2","bdMiniList":false,"bdSign":"","bdPic":"","bdStyle":"0","bdSize":"16"},"share":{"bdSize":16}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];
    };
    </script>
    </div>
    
    <div class="clear"></div>
    <div id="footer">
    <div id="hd">
    <div class="bg"></div>
    <br><a href="//www.fzdm.com/about">关于我们</a> | <a href="//www.fzdm.com/lianxi">联系我们</a> | <a href="//www.fzdm.com/map">网站地图</a><br />
    Copyright &#9426; 2014-2015 风之动漫 版本beta 0.3<br />
    </div>
    </div>
    
    <div style="display:none;" ><script src="//static.fzdm.com/stat.js"></script></div>
    
    </body>
    </html>
    

    请注意这段代码

    <div id="mhimg0"><h2><a href="//manhua.fzdm.com/2/889/">《无法观看》请点击此处~</a></h2></div>
    

    如果直接爬取原网页,肯定没法获取图片的,那么图片从哪来呢?

    var mhurl = "2017/12/22064917941533.jpg";
    var mhss = getCookie("picHost");
    if (mhss == "") {
        mhss = "p1.xiaoshidi.net";
    }
    if (mhurl.indexOf("2015") != -1 || mhurl.indexOf("2016") != -1|| mhurl.indexOf("2017") != -1 || mhurl.indexOf("2018") != -1){
    
    }else{
        mhss = mhss.replace(/p1/,"p0");
    };
    
    var mhpicurl = mhss+"/"+mhurl;
    if (mhurl.indexOf("http") != -1){
        mhpicurl = mhurl;
    };
    function nofind(){
    
    var img=event.srcElement;
    
    img.src="http://p1.xiaoshidi.net/"+mhurl;
    var exp = new Date();
    exp.setTime(exp.getTime() - 1);
    document.cookie = "picHost=0;path=/;domain=fzdm.com;expires="+exp.toGMTString();
    img.onerror=null;
    };
    $("#mhimg0").html('<a href="index_1.html"><img src="http://'+mhpicurl+'" id="mhpic" alt="海贼王889话" onerror="nofind();" /></a>');

    这一段js代码在网页加载完后自动运行,修改了<div id="mhimg0"></div>的内容,才有了图片。
    js没有多余请求,只是修改了网页内容,这种情况如果想直接java解析,只能用正则,而且如果js代码稍有变化,正则解析就不行了。所以针对这种网页,直接用SeimiAgent把js渲染之后的网页返回给我们是最好的处理方式。

    Boot.java

    package com.ouyang.main;
    
    import cn.wanghaomiao.seimi.core.Seimi;
    
    /**
     * @author 汪浩淼 [et.tw@163.com]
     * @since 2015/10/21.
     */
    public class Boot {
        public static void main(String[] args){
            Seimi s = new Seimi();
            s.goRun("seimiagent");
        }
    }
    

    goRun("seimiagent");填写对用爬虫名就行了。
    启动main函数:
    这里写图片描述

    图(3)

    seimiagent的解析信息, windows版本是后台运行,没有解析信息。
    控制台信息:
    这里写图片描述
    图(4)

    <div id="mhimg0"><a href="index_1.html"><img src="http://p1.xiaoshidi.net/2017/12/22064917941533.jpg" id="mhpic" alt="海贼王889话" onerror="nofind();"></a></div>

    这段代码,很明显表示,网页信息已经是成功解析后的了。
    总的来说这套爬虫框架还是很简单的,想要深入了解框架的同学,可以看看下一篇关于实战的文章。

    同系列文章

    java爬虫系列(一)——爬虫入门
    java爬虫系列(三)——漫画网站爬取实战
    java爬虫系列(四)——动态网页爬虫升级版
    java爬虫系列(五)——今日头条文章爬虫实战

    展开全文
  • Java爬虫爬取网页数据

    2017-11-07 20:38:13
    此工具可用于网页数据爬取,代码中本身就有一个demo,自行参考使用
  • java爬取京东数据

    2018-08-10 09:24:35
    java爬取京东数据,利用java的dom类,运用request获取前端页面的dom,再通过特定的格式获取对应的标签。
  • Java爬取网页数据

    万次阅读 2019-03-20 19:21:39
    要爬的网页:http://quote.eastmoney.com/zs000001.html 要爬这部分数据: 要的数据在源代码这部分: 首先定义数据: public class Information { String type; String volume; String money; ...

    要爬的网页:http://quote.eastmoney.com/zs000001.html
    要爬这部分数据:
    在这里插入图片描述

    要的数据在源代码这部分:
    在这里插入图片描述
    首先定义数据:

    public class Information {
        String type;
        String volume;
        String money;
        String market_value;
        String number;
        String price_earnings_ratio;
        public void setType(String type){
            this.type = type;
        }
        public String getType(){
            return type;
        }
        public void setVolume(String volume){
            this.volume = volume;
        }
        public String getVolume(){
            return volume;
        }
        public void setMoney(String money){
            this.money = money;
        }
        public String getMoney(){
            return money;
        }
        public void setMarket_value(String  market_value){
            this.market_value = market_value;
        }
        public String  getMarket_value(){
            return market_value;
        }
        public void setNumber(String  number){
            this.number = number;
        }
        public String  getNumber(){
            return number;
        }
        public void setPrice_earnings_ratio(String  price_earnings_ratio){
            this.price_earnings_ratio = price_earnings_ratio;
        }
        public String getPrice_earnings_ratio(){
            return price_earnings_ratio;
        }
    }
    

    i

    mport org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
    import org.apache.commons.httpclient.HttpClient;
    import org.apache.commons.httpclient.HttpException;
    import org.apache.commons.httpclient.HttpStatus;
    import org.apache.commons.httpclient.methods.GetMethod;
    import org.apache.commons.httpclient.params.HttpMethodParams;
    
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    public class AlmanacUtil {
    
        public AlmanacUtil() {
    
        }
    //获得源码
        public String getdata(String url) {
            String data = null;
            org.apache.commons.httpclient.HttpClient client = new HttpClient();
            GetMethod getMethod = new GetMethod(url);
            getMethod.setRequestHeader("User_Agent", "Mozilla/5.0(Windows NT 6.1;Win64;x64;rv:39.0) Gecko/20100101 Firefox/39.0");
            getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());//系统默认的恢复策略
            try {
                int statusCode = client.executeMethod(getMethod);
                if (statusCode != HttpStatus.SC_OK) {
                    System.out.println("Wrong");
                }
                byte[] responseBody = getMethod.getResponseBody();
                data = new String(responseBody);
                return data;
    
            } catch (HttpException e) {
                System.out.println("Please check your provided http address!");
                data = "";
                e.printStackTrace();
    
            } catch (IOException e) {
                data = "";
                e.printStackTrace();
            } finally {
    
                getMethod.releaseConnection();
    
            }
            return data;
        }
    
        //想要获取字段部分的分割模式
        static Pattern proInfo = Pattern.compile("<td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>" +
                "<td>(.*?)</td><td>(.*?)</td>", Pattern.DOTALL);
    
        private static List<Information> getDataStructure(String str) {
            //想要获取的整段数据的分割模式
            String[] info = str.split("</tr>");
            List<Information> list = new ArrayList<Information>();
            for (String s : info) {
                Matcher m = proInfo.matcher(s);
                Information information = null;
                if (m.find()) {
                    information = new Information();
                    String ss = m.group(1).trim();
                    information.setType(ss);
                    information.setVolume(m.group(2).trim());
                    information.setMoney(m.group(3).trim());
                    information.setMarket_value(m.group(4).trim());
                    information.setNumber(m.group(6).trim());
                    information.setPrice_earnings_ratio(m.group(7).trim());
                    list.add(information);
                }
            }
            return list;
        }
    
        public static void main(String[] args) throws IOException {
            AlmanacUtil almanacUtil = new AlmanacUtil();
            String ss = almanacUtil.getdata("http://quote.eastmoney.com/zs000001.html");
            List<Information> list = getDataStructure(ss);
            String string = "";
            for (int k = 0; k < list.size(); k++) {
                String s = "类别:" + list.get(k).getType() + " " + "成交量:" + list.get(k).volume + " " +
                        "成交金额:" + list.get(k).getMoney() + " " + "总市值:" + list.get(k).getMarket_value() +
                        " " + "上市公司(家):" + list.get(k).getNumber() + " " + "平均市盈率:" + list.get(k).getPrice_earnings_ratio() + "\n";
                string = string + s;
            }
            System.out.println(string);
            File f = new File("D:" + File.separator + "gupiao.txt");//存在D盘guipiao.txt里
            OutputStream out = null;
            out = new FileOutputStream(f);
            byte b[] = string.getBytes();
            out.write(b);
            out.close();
        }
    }
    
    展开全文
  • 1、下载phantomjs。...2、将压缩包解压到自己选择的一个地址(我选的是D:\software\...3、编写js文件,我将js文件放在D:\software\phantomjs\codes.js,该路径会在java程序中以绝对路径调用。 //codes.js system ...
  • Dong * @create 2021/9/2 15:56 * @desc Jsoup爬取网页数据 **/ @Data @TableName("menu") public class Menu extends Model<Menu> { @TableId(value = "id") private String id; @TableField("title") private ...
  • 以前笔记里的简单的小爬虫引用了jsoup不知道是不是你... //传入你所要爬取的页面地址InputStream is=null; //创建输入流用于读取流BufferedReader br=null; //包装流,加快读取速度StringBuffer html=new StringBuf...
  • 在写爬虫的时候需要下载一个页面上的附件,比如http://www.jsqts.gov.cn/zjxx/... 这个网站上面的附件,但是直接用jsoup抓取页面的话html里什么都没有,百度了之后知道好多内容是js动态加载的,于是使用了httpunit,...
  • java简单实现抓取动态网页数据

    万次阅读 2018-04-19 11:16:40
    在这里我分享一段简单的获取js执行后的网页数据!1.先建立一个maven工程在这里我随便建了一个web工程!2.将chromedriver.exe 文件放在安装谷歌的目录:下载地址:...
  • Java多线程爬取网页

    2018-09-27 16:12:17
    适合:简单地获取纯文字网页的内容。需要创建子线程or修改爬取网页请在testpc.java中修改,webpc用于获取指定网页内容,runthread用于创建子线程爬虫,testpc则是主线程,用于管理子线程的创建、运行与等待。
  • Java实现定向爬取数据的源码,有详细的说明文档,比较简单,思路清晰,比较适合初学者和中级的人员参考。
  • java爬取网站数据

    2021-03-16 11:55:10
    package ...import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.concurrent.CountDownLatch;import com.zzger.module.queue.UrlQueue;import com.zzger...
  • 简单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) " + ...
  • Java爬取网页内容demo

    2020-05-27 15:04:17
    它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据,可以看作是java版的jQuery。 1. 获取数据源的方法:Document doc = Jsonp.connect("https://xxxxxx").get(); 2....
  • Javajava爬虫获取动态网页数据

    万次阅读 热门讨论 2016-12-07 16:13:21
    前段时间一直在研究爬虫,...获取到Document 然后就想干嘛就干嘛了,但是一旦碰到一些动态生成的网站就不行了,由于数据网页加载完成后执行js代码加载的,或者是用户滑动浏览触发的js加载数据,这样的网页使用Jsou
  • 通过java中的.net包抓取网页上的数据,并且自动生成文件,详细代码如下: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import ...
  • 先获取登录页面登录之后要请求的url 通过上述url去获取html内容,并解析URL获取需要的数据import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util....
  • JAVA爬取网页内容

    2021-03-18 09:47:23
    前期准备工作:需要去查看一下要爬的网页的结构,对自己要爬的数据的标签要熟悉。操作:在页面上按F12查看标签的内容。 就是js+css+html标签的构造,我们使用比较多的是a、img这两个标签。第一个是链接,第二个是...
  • 爬取网页数据代码 解析代码 解析介绍 完整代码 介绍 1.爬取通过org.jsoup和HttpClients实现 2.爬取多页内容的时候进行循环,多页进行爬取 3.爬取来数据解析到jsonoup 4.取回数据使用文件保存直接保存到...
  • Java抓取网页数据(原网页+Javascript返回数据) 有时候网站为了保护自己的数据,并没有把数据直接放在网页源码中返回,而是采用异步的方式,用JS返回数据,这样可以避免搜索引擎等工具对网站数据的抓取。 ...
  • 先说下背景,前几天老哥让帮忙从网上抓点数据,因为他是做食品添加剂的推广工作的,所以需要知道有哪些工厂或者厂家可能需要食品添加剂,然后他给了我一个网址----某食品药品许可公示平台。既然是公示平台,数据应该...
  • 1、浏览器驱动下载地址:http://npm.taobao.org/mirrors/chromedriver 2、maven依赖 org.seleniumhq.selenium selenium-java 3.9.0 com.google.guava guava 30.1-jre 3、代码 import org.apache.commons.lang3....
  • 虽然我们程序员不干爬虫的活,但是工作中确实偶尔有需要网络上的数据的时候,手动复制粘贴的话数据量少还好说,万一数据量大,浪费时间不说,真的很枯燥。 所以现学现卖研究了一个多小时写出了个爬虫程序 一、爬虫所...
  • 爬取网页数据的demo 1.引入依赖jsoup <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.10.2</version> </dependency> ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,738
精华内容 5,095
关键字:

java爬取动态网页数据

java 订阅