精华内容
下载资源
问答
  • 昨天才发现原来不止python可以爬数据JAVA也可以。JAVA果然是世界上最好的语言。哈哈哈哈哈哈哈。 进入正题。 首先自己建一个MAVEN项目 怎么建就不说了,直接贴依赖了。 <dependency>...

    我我我我我又回来了,好久没更新,昨天写的项目突然需要解析一个网页获取到指定数据,自然的就想到了爬虫。好了下面开始。
    下面来说说what is 爬虫。算了自己去百度吧,这个没营养。昨天才发现原来不止python可以爬数据,JAVA也可以。JAVA果然是世界上最好的语言。哈哈哈哈哈哈哈。
    进入正题
    首先自己建一个MAVEN项目
    怎么建就不说了,直接贴依赖了。

    		<dependency>
    			<groupId>org.jsoup</groupId>
    			<artifactId>jsoup</artifactId>
    			<version>1.11.3</version>
    		</dependency>
    

    开始撸代码,里面有一些jsoup(爬虫)的方法,其它的就不另写了,自行百度,直接拿项目里代码的贴了

    /**
    	 * 通过标签id获得父标签,然后根据属性来找到对应速率
    	 * 再通过id找到channel
    	 * @param url
    	 * @return
    	 */
    	public static String getChannel(String url){
    		try {
    			//这是自己建的实体类
    			channel = new Channel();
    			//获得document
    			Document doc = Jsoup.connect(url).get();
    			//这个是精确查找,只会返回一个对象,是通过id找的,id设计机密,我瞎造了
    			Element result = doc.getElementById("dsad");
    			//这是通过属性来找,属性可能重复,所以返回的是对象集合
    			Elements elements = result.getElementsByAttributeValue("selected", "selected");
    			channel.setRate(elements.get(0).ownText());
    			//一样的也是通过id查找
    			Element result2 = doc.getElementById("dddd");
    			//这个是获取值的操作
    			channel.setChannel(result2.val());
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return channel.toString();
    	}
    

    接下来是吧字符串换成html来解析,调用了prase方法,贴代码

    public static void getChannel(String url){
    		//这个是retforit的,这里先不总结,以后再说。
    		Call<String> call = RetrofitHelper.getInstance(url).getAppServer()
    				.uploadData("root", "root");
    		call.enqueue(new Callback<String>() {
    			public void onResponse(Call<String> call, Response<String> response) {
    				channel = new Channel();
    				//response.body()是String类型的,然后调用Jsoup.prase把他改成document类型,就可以和之前一样操作了
    				Document document = Jsoup.parse(response.body());
    				Element result = document.getElementById("dddd");
    				Elements elements = result.getElementsByAttributeValue("selected", "selected");
    				channel.setRate(elements.get(0).ownText());
    				Element result2 = document.getElementById("ddd");
    				channel.setChannel(result2.val());
    				System.out.println(channel.toString());
    			}
    
    			public void onFailure(Call<String> call, Throwable t) {
    				System.out.println(t.toString());
    			}
    		});
    	}
    

    是不是以为这就没了,嘎嘎嘎嘎嘎,还有还有,接下来是直接访问本地资源,上代码

    public static void main(String[] args) {
            try {
                Document document = Jsoup.parse(new File("c://hhhh.html"), "utf-8");
                System.out.println(document);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

    好了就到这里吧,看完记得点个赞。

    展开全文
  • java爬取https网站数据实现

    千次阅读 2019-10-14 13:59:53
    java爬取http类型的网站比较容易实现,因为不需要建立证书的通道,直接通过httpclient访问链接获取相应源码就可以获取相关数据,现在我们可以通过证书的方式,实现java爬取https网站的相关数据。 1.下载网站的证书 ...

    java爬取http类型的网站比较容易实现,因为不需要建立证书的通道,直接通过httpclient访问链接获取相应源码就可以获取相关数据,现在我们可以通过证书的方式,实现java爬取https网站的相关数据。

    1.下载网站的证书 

        以CSDN博客为例 谷歌浏览器右键网页——点击检查——点击security出现如下界面

    点击view certificate

    点击证书路径 我们可以发现证书如下:

    想要导出证书  需要IE浏览器得支持 我们使用IE浏览器重新访问该网站

    点击工具——Internet选项

    可以找到相关证书:

    接下来点击导出

    选择保存的目录以及文件名

    导出即可

    2.java命令行将证书生成秘钥库

    进入JDK 安装bin目录,命令行运行:keytool -import -alias Root -file d:/test.cer -keystore “d:/test.keystore” -storepass 123456。转换证书

    3.编写代码

    项目目录如下:红色框框圈住的为需要的包,下载地址为:https://download.csdn.net/download/qq_36706878/11855431

    代码如下:

    public static Document sendHttp(String url) {
            String html = "";
            CloseableHttpClient httpclient = null;
            CloseableHttpResponse response = null;
            try {
                SSLConnectionSocketFactory sslsf = createSSLConnSocketFactory();
                httpclient = HttpClients.custom()
                    .setSSLSocketFactory(sslsf).build();
                HttpGet httpget = new HttpGet(url);
                httpget.addHeader(HttpHeaders.USER_AGENT,
                        "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0");
                RequestConfig requestConfig = RequestConfig.custom()
                        .setSocketTimeout(10000).setConnectTimeout(10000).build();// 设置请求和传输超时时间
                httpget.setConfig(requestConfig);
                System.out.println("Executing request " + httpget.getRequestLine());
                response = httpclient.execute(httpget);
                HttpEntity entity = response.getEntity();
                System.out.println("----------------------------------------");
                System.out.println(response.getStatusLine());
                int resStatu = response.getStatusLine().getStatusCode();// 返回码
                if (resStatu == HttpStatus.SC_OK) {// 200正常 其他就不对
                    // 获得相应实体
                    if (entity != null) {
                        html = EntityUtils.toString(entity, "UTF-8");
                        html = html.replace("&nbsp;", " ");
                    }
                }
                EntityUtils.consume(entity);
            } catch(Exception e){
                e.printStackTrace();
            }finally{
                if(response!=null){
                    try {
                        response.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(httpclient!=null){
                    try {
                        httpclient.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            Document document = Jsoup.parse(html);
    		return document;
        }
    	
    	// ssl通道证书的创建
        private static SSLConnectionSocketFactory createSSLConnSocketFactory()
                throws Exception {
            SSLContext sslcontext = SSLContexts
                    .custom()
                    .loadTrustMaterial(
                            new File(
                                    "E:/key.keystore"),
                            "123456".toCharArray(), new TrustSelfSignedStrategy())   //文件和密码要对应
                    .build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
                    sslcontext, new String[] { "TLSv1" }, null,
                    SSLConnectionSocketFactory.getDefaultHostnameVerifier());
            return sslsf;
        }

    测试结果:

    展开全文
  • Java爬取网站ajax返回的数据

    千次阅读 2019-03-05 18:22:20
    demo:爬取天津市网上办事大厅的数据 http://zwfw.tj.gov.cn/permissionitem_list_Sort2.jspx?ptype=P 开发时需要用到httpclient的jar包https://download.csdn.net/download/qq_41032995/10998137 访问网址的时候...

    demo:爬取天津市网上办事大厅的数据

    http://zwfw.tj.gov.cn/permissionitem_list_Sort2.jspx?ptype=P

    开发时需要用到httpclient的jar包 https://download.csdn.net/download/qq_41032995/10998137

    访问网址的时候抓包

    demo1

    查看一下需要提交的参数

    2

    3

    上代码

    public static String httpPostWithJSON(String url) throws Exception {
    	 
    	        HttpPost httpPost = new HttpPost(url);
    	        CloseableHttpClient client = HttpClients.createDefault();
    	        String respContent = null;
    	        /*
    	        json方式
    	        JSONObject jsonParam = new JSONObject();  
    	        jsonParam.put("pageNo", "1");
    	        jsonParam.put("ptypekey", "p");
    	        jsonParam.put("areaid", "120000");
    	        jsonParam.put("sortkey", "");
    	        jsonParam.put("deptidkey", "120000101");
    	        jsonParam.put("xzxkkey", "");
    	        jsonParam.put("selname", "");
    	        StringEntity entity = new StringEntity(jsonParam.toString(),"utf-8");//解决中文乱码问题    
    	        entity.setContentEncoding("UTF-8");    
    	        entity.setContentType("application/json");    
    	        httpPost.setEntity(entity);
    	        System.out.println();
    	        */
    	        //表单方式
    	        List<BasicNameValuePair> pairList = new ArrayList<BasicNameValuePair>(); 
    	        /*
    	        pairList.add(new BasicNameValuePair("pageNo", "2"));
    	        pairList.add(new BasicNameValuePair("ptypekey", "p"));
    	        pairList.add(new BasicNameValuePair("areaid", "120000"));
    	        pairList.add(new BasicNameValuePair("sortkey", ""));
    	        pairList.add(new BasicNameValuePair("deptidkey", "00012533X"));
    	        pairList.add(new BasicNameValuePair("xzxkkey", ""));
    	        pairList.add(new BasicNameValuePair("selname", ""));
    	        */
    	        httpPost.setEntity(new UrlEncodedFormEntity(pairList, "utf-8"));   
    	        
    	        HttpResponse resp = client.execute(httpPost);
    	        HttpEntity he = resp.getEntity();
    	        respContent = EntityUtils.toString(he,"UTF-8");
    	        return respContent;
    	    }
    
    
     public static void main(String[] args) throws Exception {
    	    	String postParameter = "pageNo=&sortkey=&deptidkey=&xzxkkey=&ptypekey=P&selname=&areaid=120000";
    	        String result = httpPostWithJSON("http://zwfw.tj.gov.cn/lawGuide/spsx_page_list.jspx?R="+Math.random()+"&"+postParameter);
    	        System.out.println(result);
    	    }

    得到返回的数据后,你就可以根据需求进行下一步开发了。

    展开全文
  • java爬虫爬取网站数据实例

    千次阅读 2018-03-15 16:05:33
    01&lt;font&gt;&lt;/font&gt;002package com.zzger.model;&lt;font&gt;&lt;/font&gt;003 &...004import java.util.ArrayList;...005import java.util.Collecti
    01<font></font>
    002package com.zzger.model;<font></font>
    003  <font></font>
    004import java.util.ArrayList;<font></font>
    005import java.util.Collections;<font></font>
    006import java.util.List;<font></font>
    007import java.util.concurrent.CountDownLatch;<font></font>
    008  <font></font>
    009import com.zzger.module.queue.UrlQueue;<font></font>
    010import com.zzger.util.HttpUtils;<font></font>
    011import com.zzger.util.RegexUtils;<font></font>
    012  <font></font>
    013public class WebSite {<font></font>
    014  <font></font>
    015    /**<font></font>
    016     * 站点url<font></font>
    017     */<font></font>
    018    private String url;<font></font>
    019      <font></font>
    020    /**<font></font>
    021     * 需要爬行的url队列<font></font>
    022     */<font></font>
    023    private UrlQueue<String> urls = new UrlQueue<>();<font></font>
    024      <font></font>
    025    /**<font></font>
    026     * 已爬行过的页面url<font></font>
    027     */<font></font>
    028    private List<String> exitUrls = Collections.synchronizedList(new ArrayList<>());<font></font>
    029      <font></font>
    030    private static final int TOTAL_THREADS = 12;  <font></font>
    031      <font></font>
    032    private final CountDownLatch mStartSignal = new CountDownLatch(1);  <font></font>
    033      <font></font>
    034    private final CountDownLatch mDoneSignal = new CountDownLatch(TOTAL_THREADS);   <font></font>
    035      <font></font>
    036    public WebSite(String url){<font></font>
    037        this.url = url;<font></font>
    038        urls.offer(url);//把网站首页加入需要爬行的队列中<font></font>
    039    }<font></font>
    040      <font></font>
    041    public void guangDu(){<font></font>
    042        new Thread(new Runnable() {<font></font>
    043            @Override<font></font>
    044            public void run() {<font></font>
    045                paxing(HttpUtils.httpGet(url));<font></font>
    046            }<font></font>
    047        }).start();<font></font>
    048    }<font></font>
    049      <font></font>
    050    public void paxing(String html){<font></font>
    051        if(html.lastIndexOf("下一页</a></li></ul></div>")<0)    return ;<font></font>
    052        String strList = html.substring(html.indexOf("<li class=\\"next-page\\">"), <font></font>
    053                html.lastIndexOf("下一页</a></li></ul></div>"));<font></font>
    054        String url = RegexUtils.RegexString("<a href=\\"(.+?)\\"", strList);<font></font>
    055        if(url.equals("Nothing")) return ;<font></font>
    056        urls.put(url);//把url存储到队列中<font></font>
    057        paxing(HttpUtils.httpGet(url));<font></font>
    058    }<font></font>
    059      <font></font>
    060    public void dxcPx(){<font></font>
    061        Page<DuanZi> page = new Gxpage(urls.take());<font></font>
    062        List<Section<DuanZi>> list = page.ybhqSection().getSections();<font></font>
    063        for(Section<DuanZi> section : list){<font></font>
    064            new Thread(new Runnable() {<font></font>
    065                @Override<font></font>
    066                public void run() {<font></font>
    067                    mStartSignal.countDown();// 计数减一为0,工作线程真正启动具体操作   <font></font>
    068                    try {<font></font>
    069                        mStartSignal.await();// 阻塞,等待mStartSignal计数为0运行后面的代码   <font></font>
    070                        // 所有的工作线程都在等待同一个启动的命令   <font></font>
    071                    catch (InterruptedException e) {<font></font>
    072                        e.printStackTrace();<font></font>
    073                    }<font></font>
    074                    DuanZi duanzi = section.select().getModel();<font></font>
    075                    System.out.println(duanzi.getTitle());<font></font>
    076                    mDoneSignal.countDown();// 完成以后计数减一   <font></font>
    077                }<font></font>
    078            }<font></font>
    079            ).start();<font></font>
    080        }<font></font>
    081        try<font></font>
    082        {  <font></font>
    083            mDoneSignal.await();// 等待所有工作线程结束   <font></font>
    084        }  <font></font>
    085        catch (InterruptedException e)  <font></font>
    086        {  <font></font>
    087            e.printStackTrace();  <font></font>
    088        }  <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    089        dxcPx(); //线程任务执行完后,再次获取URL队列进行任务</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    090    }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    091    public static void main(String [] args){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    092        WebSite web = new WebSite(“https://www.bdqnhyq.com”);</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    093        web.guangDu();</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    094        forint i = 0; i <10; i ++){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    095            新线程(new Runnable(){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    096                @覆盖</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    097                public void run(){</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    098                    web.dxcPx();</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    099                }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    100            })。开始();</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    101        }</font></font><font></font>
    102          <font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    103    }</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">
    104}</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

    文章来源:北大青鸟开发小组
    展开全文
  • JAVA爬取网站查询网络IP所在地

    千次阅读 2019-12-05 14:35:29
    JAVA爬取网站查询网络IP所在地 网络中我们上网都是一个ip地址,在获取对象网络ip的时候,如果想查询他所在网络的地址怎么搞呢?上代码 1.写一个方法通过站长工具网站查询到你输入的ip的地址,需要用URL去爬取网站...
  • 最近开发用到了爬取题库的功能,直接是无法爬取的,通过分析,发现可以通过账号登陆,携带COOKIE信息爬取网站数据。为了方便交流学习,现将代码公开。
  • java爬取某电影网站数据

    万次阅读 2017-08-03 19:36:02
    使用jsoup获取动态网站数据 部分代码:/** * 获取分类的所有相对链接地址 和名称,保存到map中,返回数据 * */ public class GetMoviesName { private String url; HashMap, String> hrefandname = new ...
  • Java爬取github网站

    2020-07-28 16:50:29
    文章目录项目背景核心功能开发环境主要流程模块组成核心技术项目测试 项目背景 1.什么是爬虫 ...爬取github网站里awssome-java这个网页中 核心功能 开发环境 主要流程 模块组成 核心技术 项目测试 ...
  • 爬取网站的时候遇到了问题,因为网站的避免CSRF攻击机制,无法获取到目标页面数据,而是跳转到一个默认页面。 关于CSRF 1、CSRF tokens是如何工作(详情请点击查引用源站点) 1、服务器发送给客户端一个...
  • java 爬取数据(三)

    千次阅读 2018-03-21 17:31:43
    因为本人在某司上班用到一些数据,所以就爬取公司web网的数据,具体代码就不...不过jsoup就是jquery类似的框架,稍微有点前端基础就可以完成的,希望大家也多做小demo,爬取相应的网站练练手,不说了,我要去清洗数据去了....
  • 爬取数据源为天天基金网的页面基金数据 创建java maven项目,推荐用spring boot maven需要引入的jar包依赖 <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> ...
  • 工欲善其事必先利其器,首先介绍...它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。 有了它,我们就可以很轻松的获取某个web页面的DOM文档,并利用jsoup强大的html解析功能,
  • java爬取http类型的网站比较容易实现,因为不需要建立证书的通道,直接通过httpclient访问链接获取相应源码就可以获取相关数据,现在我们可以通过证书的方式,实现java爬取https网站的相关数据。 获取https网站证书...
  • java爬取http类型的网站比较容易实现,因为不需要建立证书的通道,直接通过httpclient访问链接获取相应源码就可以获取相关数据,现在我们可以通过证书的方式,实现java爬取https网站的相关数据。 获取https网站证书...
  • java爬取拉勾网职位数据

    千次阅读 2016-12-14 11:11:37
    原文出自:自我的青春 笔者说明~~~!!...只用于学习交流,私自用于其他途径,后果自负!... fastjson-1.1.41.jar ,jsoup-1.6.2.jar,commons-... 2、进行网站请求分析      如上图,得到链接: https:
  • <artifactId>mysql-connector-java <version>5.1.18 <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --> <groupId>org.jsoup <artifactId>jsoup <version>1.8.3 <finalName>maven ...

空空如也

空空如也

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

java爬取网站数据

java 订阅