爬虫技术概览

爬虫介绍

简介

自动化、半自动化从互联网上采集数据的程序。

爬虫框架

一个简单的爬虫框架:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ifdLU0V-1625273924704)(http://m.qpic.cn/psb?/V142fVv21EKO4b/ehGhiSFPmw1GPPzU1LdWwTeX4v5JdcLe9d6KUIg.upE!/b/dL4AAAAAAAAA&bo=SQLDAQAAAAADB6s!&rf=viewer_4)]

如上图,通常爬虫会有一份种子URL,放在待抓取队列,通过scheduler调度这些url,交由downloader去下载网页数据,
进行数据的清洗解析,获取到所需要的信息进行存储,并将新解析出的有用URL放入待抓取队列。

爬虫的各个阶段

调度阶段

下图是调度系统通常需要考虑的一些事情。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ANVlp8b-1625273924706)(http://m.qpic.cn/psb?/V142fVv21EKO4b/Kb8Ov*GsHX5olgwSDQOiTKaXUc8Fk1DvgB4WaFecaQw!/b/dL8AAAAAAAAA&bo=MgKRAAAAAAADB4M!&rf=viewer_4)]

下图是一个简单的调度模块,由一个Crane定时任务+queue队列来实现一个基本的调度。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GkQudYxZ-1625273924707)(http://m.qpic.cn/psb?/V142fVv21EKO4b/N5QsvBPNK6*43qv8XNvhwkUQULxtCrgPBGXw6ISjdSY!/b/dFIBAAAAAAAA&bo=pwGmAQAAAAADByM!&rf=viewer_4)]

下载阶段

通常通过封装HttpClient、HttpUrlConnection来实现下载器。

HttpClient的应用举例

//HttpClient的使用样例,下面是一个GET请求,PostMethod可以发送post请求,同理也可发送delete、put、head请求。 

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.ListUtils;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.lang.StringUtils;
import java.io.IOException;
 
public static void main(String[] args) {
    HttpClient httpClient = new HttpClient();
    HttpMethod httpMethod = new GetMethod("http://www.sina.com.cn");
    httpMethod.addRequestHeader("Content-Type", "text/html;charset=utf-8"); //这里设置字符编码,避免乱码
    int statusCode = -1;
    byte[] result = null;
    try {
        statusCode = httpClient.executeMethod(httpMethod);
        if (statusCode != HttpStatus.SC_OK) {//判断返回
            System.out.println("get failure!");
            return;
        }
        if (httpMethod.getResponseBody() != null) {//获取页面数据
            result = httpMethod.getResponseBody();//hm.getStatusLine()――http状态和请求结果
        }
    } catch (HttpException e1) {
        e1.printStackTrace();
    } catch (IOException e2) {
        e2.printStackTrace();
    } finally {
        httpMethod.releaseConnection();
    }

    if (result != null) {
        try {
            String data = new String(result, "UTF-8");//字符编码设置
            System.out.println(data);//测试输出
        } catch (Exception e) {
            LOGGER.info("an exception! e = {}", e);
        }
    }
}
 
//jar包依赖
/*
<dependency>
    <groupId>commons-httpclient</groupId>
    <artifactId>commons-httpclient</artifactId>
    <version>3.1</version>
</dependency>
*/

  1. post请求可以用于模拟登录网页等操作,是常用到的一种请求方式,post请求一般需要携带header、cookie等信息。

  2. 此类方式抓到的数据都是未经过JS渲染的。

  3. todo增加一篇详细的httpclient等下载方式的介绍。以及模拟登录的实现样例。

解析阶段

此阶段主要是将下载阶段获取的html文本或者其他格式的数据进行格式化,

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值