距离上一次写爬虫还是几年前了,那时候一直使用的是httpclient。

由于最近的项目又需要使用到爬虫,因此又重新查询了一些爬虫相关的框架,其中最合适的是WebMagic

官方文档:https://github.com/code4craft/webmagic

官方教程:http://webmagic.io/docs/zh/

WebMagic里面也是封装了httpclient来进行请求。因此不论是否直接使用WebMagic框架, 都是使用到了httpclient。

PS:httpclient3和4版本区别较大,下面代码均是在httpclient4的基础上进行测试开发。

HttpClient

1.创建HttpClient

HttpClients.createDefault()
HttpClients.createSystem()
HttpClients.createMinimal()
HttpClients.createMinimal(HttpClientConnectionManager)

2.post请求

2.1创建一个post请求

String uri = "";
HttpPost post = new HttpPost(uri);

2.2添加请求头

post.setHeader("Connection", "keep-alive");
post.setHeader("Accept-Encoding", "gzip, deflate");
......

2.3添加请求参数

List<NameValuePair> list = new ArrayList<>();
list.add(new BasicNameValuePair("username", "test"));
list.add(new BasicNameValuePair("password", ""));
post.setEntity(new UrlEncodedFormEntity(list, "UTF-8"));

2.4发起请求

HttpResponse response = httpClient.execute(post);

3.get请求

3.1创建一个get请求

String uri = "";
URIBuilder uriBuilder = new URIBuilder(uri);
HttpGet get = new HttpGet(uriBuilder.build());

3.2添加请求头

get.setHeader("Connection", "keep-alive");
get.setHeader("Accept-Encoding", "gzip, deflate");
......

3.3添加请求参数

uriBuilder.setParameter("param1", "");
uriBuilder.setParameter("param2", "");
......

3.4发起请求

HttpResponse response = httpClient.execute(get);

4.响应信息

发起请求后都会获得一个响应对象HttpResponse。

响应中主要包含了响应头、状态码、响应信息。

状态码一般是200和302,302表示请求重定向,可以从它的响应头中获取重定向的新路径,再次发起请求,如下

int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == ) {
String location = response.getFirstHeader("location").getValue();
System.out.println("302 new uri : " + location);

如果发起成功,可以读取里面的响应信息。

响应信息分为多种,如html、照片、文件、json等等。具体情况需要根据实际区分。

html、json

String content = EntityUtils.toString(response.getEntity());

照片、文件

HttpEntity entity = response.getEntity();
OutputStream os = null;
os = new FileOutputStream(pdfPath + filenames.get());
InputStream is = entity.getContent();
while (true) {//这个循环读取网络数据,写入本地文件
byte[] bytes = new byte[ * ]; //1M
int k = is.read(bytes);
if (k >= ) {
os.write(bytes, , k);
os.flush();
} else break;
}
os.close();
is.close();

Processor

Java爬虫的实现的更多相关文章

  1. webmagic的设计机制及原理-如何开发一个Java爬虫

    之前就有网友在博客里留言,觉得webmagic的实现比较有意思,想要借此研究一下爬虫.最近终于集中精力,花了三天时间,终于写完了这篇文章.之前垂直爬虫写了一年多,webmagic框架写了一个多月,这方 ...

  2. JAVA爬虫挖取CSDN博客文章

    开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...

  3. 爬虫6:多页面增量Java爬虫-sina主页

    之前写过很多单页面python爬虫,感觉python还是很好用的,这里用java总结一个多页面的爬虫,迭代爬取种子页面的所有链接的页面,全部保存在tmp路径下. 1 序言 实现这个爬虫需要两个数据结构 ...

  4. 推荐几个优秀的java爬虫项目

    java爬虫项目   大型的: Nutch apache/nutch · GitHub 适合做搜索引擎,分布式爬虫是其中一个功能. Heritrix internetarchive/heritrix3 ...

  5. Java爬虫搜索原理实现

    permike 原文 Java爬虫搜索原理实现 没事做,又研究了一下爬虫搜索,两三天时间总算是把原理闹的差不多了,基本实现了爬虫搜索的原理,本次实现还是俩程序,分别是按广度优先和深度优先完成的,广度优 ...

  6. JAVA爬虫 WebCollector

    JAVA爬虫 WebCollector 爬虫简介: WebCollector是一个无须配置.便于二次开发的JAVA爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫. 爬虫 ...

  7. Java爬虫

    作为一位Java爬虫的初学者,分享一下自己的心得.所用到的jar包 org.codehaus.jettison.jar jsoup-1.7.3.jar个人认为爬虫的实现机制:获取Docume对象-&g ...

  8. 爬虫入门 手写一个Java爬虫

    本文内容 涞源于  罗刚 老师的 书籍 << 自己动手写网络爬虫一书 >> ; 本文将介绍 1: 网络爬虫的是做什么的?  2: 手动写一个简单的网络爬虫; 1: 网络爬虫是做 ...

  9. JAVA爬虫实践(实践三:爬虫框架webMagic和csdnBlog爬虫)

    WebMagic WebMagic是一个简单灵活的Java爬虫框架.基于WebMagic,你可以快速开发出一个高效.易维护的爬虫. 采用HttpClient可以实现定向的爬虫,也可以自己编写算法逻辑来 ...

  10. MinerUtil.java 爬虫工具类

    MinerUtil.java 爬虫工具类 package com.iteye.injavawetrust.miner; import java.io.File; import java.io.File ...

随机推荐

  1. python 集合(set)

    1.集合的创建 集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素. 创建集合:大括号或 set() 函数可以用来创建集合.注意:想要创建空集合,你必须使用 set() 而不是 {},后 ...

  2. day 56 Django基础五之django模型层(二)多表操作

    Django基础五之django模型层(二)多表操作   本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...

  3. 20.multi_case07

    # coding:utf-8 import re import ssl import csv import json import time import random import asyncio ...

  4. 19.SimLogin_case01

    什么是模拟登录? 要抓取的信息,只有在登录之后才能查看.这种情况下,就需要爬虫做模拟登录,绕过登录页. cookies和session的区别: cookie数据存放在客户的浏览器上,session数据 ...

  5. 牛客网NOIP赛前集训营-普及组(第七场)

    链接:C 来源:牛客网 牛牛的同学给牛牛表演了一个读心术:牛牛先任意选定一个非负整数,然后进行N次操作:每次操作前,假设牛牛当前的数是a,那么这个操作可能是a = a + x, 或者a = a * x ...

  6. Walk Through Squares HDU - 4758 AC自动机+简单状压DP

    题意:给你两个串,求用m个R,n个D能组成多少个包含这两个串 题解:先构造一个AC自动机记录每个状态包含两个串的状态, 状态很容易定义 dp[i][j][k][status]表示在AC自动机K这个节点 ...

  7. CSS清除默认边距

    body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquo ...

  8. SF Symbols 使用

    伴随着WWDC 2019 的举办,对于程序员而言 ,无疑SwiftUI 推出 是比较令人兴奋的一件事情, 其中在SwiftUI 使用之中, 我们经常使用以下系统图片 Image(systemName: ...

  9. ps photoshop

    PS-前端切图教程(切jpg图和切png图) 参考线显示和隐藏:ctrol+h alt+v+e或者打开标尺然后从点击标尺就能拖拽出来,删除也是拖到标尺附近就删除 显示.隐藏标尺:ctrol+R 显示网 ...

  10. YXcms前台注入(有限制但可以绕过)

    这个cms很久前做过代码审计,很多问题,但是经过这么长时间,现在安全性提高了不少,这几天看了下,基本没有什么特别大的问题了(不包含后台). 在yxcms/protected/apps/member/c ...