Java爬虫_静态页面

2019-03-10  本文已影响0人  笑才

一、 网络爬虫是做什么的? 他的主要工作就是 跟据指定的url地址 去发送请求,获得响应, 然后解析响应 , 一方面从响应中查找出想要查找的数据,另一方面从响应中解析出新的URL路径,然后继续访问,继续解析;继续查找需要的数据和继续解析出新的URL路径 .
一个简单的爬虫 必需的功能:
1: 发送请求和获取响应的功能 ;
2: 解析响应的功能 ;
3: 对 过滤出的数据 进行存储 的功能 ;
4: 对解析出来的URL路径 处理的功能 ;

二、爬取对象分类
静态网页:可以通过URLConnection获取页面的全部数据,这个做法就比较简单了,只需要构建一个URLConnection请求获取页面数据,然后通过正则表达式获取相关的数据即可
动态网页:网页的部分或全部数据是通过js的方式动态展现的,不能通过URLConnection直接获取,此时就需要借助HtmlUnit工具,此工具是一个无界面的浏览器,可以模拟浏览器的操作,通过这个工具,加载完网页之后,再获取页面数据进行解析,即可爬取到数据

三,本文内容

import java.io.*;
import java.net.*;

public class URLDemo {
    public static void main(String args[]){
        String strurl="http://search.dangdang.com/?key=%BB%FA%D0%B5%B1%ED&act=input";
        //建立url爬取核心对象
        try {
            URL url=new URL(strurl);
            //通过url建立与网页的连接
            URLConnection conn=url.openConnection();
            //设置Cookie
            conn.setRequestProperty("Cookie", "CCSHOW=0000; UM_distinctid=16851a6d99c465-06e87115fc0059-5d1f3b1c-1fa400-16851a6d99d4e; Hm_lvt_a508812e5f39db30c00a9baf08b5552c=1547558116; qqmail_alias=caill@primeton.com; biz_referrer=mail.primeton.com; qm_authimgs_id=0; qm_verifyimagesession=h01bbe41167310e7c54373a6f9faf39f21af4455d38cabe79a7574cd4e4389431f727dfd70f106d2bfc; tinfo=1551787690.0000*; qm_flag=0; qqmail_alias=caill@primeton.com; sid=687662877&1630ba2744be71610e2f2c8f59e0f0db,c_jLNc2jTdbU.; qm_sid=1630ba2744be71610e2f2c8f59e0f0db,c_jLNc2jTdbU.; qm_username=687662877; biz_username=687662877; ssl_edition=sail.qq.com; username=687662877&687662877; qylevel=3; qm_sk=687662877&nf7TF-OB; new_mail_num=687662877&150; qm_ssum=687662877&2c729250e04be3a80760a9cc62a41cd8");
            //通过链接取得网页返回的数据
            InputStream is=conn.getInputStream();
            
            System.out.println(conn.getContentEncoding());
            //一般按行读取网页数据,并进行内容分析
            //因此用BufferedReader和InputStreamReader把字节流转化为字符流的缓冲流
            //进行转换时,需要处理编码格式问题
            BufferedReader br=new BufferedReader(new InputStreamReader(is,"GB2312"));
        
            //按行读取并打印
            String line=null;
            while((line=br.readLine())!=null){
                System.out.println(line);
            }
            
            br.close();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
    }
}

四、总结:
通过以上代码就能获取静态的网页数据了,后面只需要通过正则表达式截取有用信息即可,此文不再赘述。

上一篇 下一篇

猜你喜欢

热点阅读