java爬虫之基于httpclient的简单Demo(二)

转载自 java爬虫之基于httpclient的简单Demo(二)

延续demo1的 java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一),demo2出炉啦,大家想学爬虫都可以从这个网盘学习哦:https://pan.baidu.com/s/1pJJrcqJ#list/path=%2F

免费课程,非常不错。其实还是主要学习一个httpclient,httpclient全是英文文档,看的我心累啊

package com.simple.crawImpl;  import com.simple.Icrawl.ICrawl;  
import com.simple.pojos.CrawlResultPojo;  
import com.simple.pojos.UrlPojo;  
import org.apache.http.HttpEntity;  
import org.apache.http.ParseException;  
import org.apache.http.client.ClientProtocolException;  
import org.apache.http.client.methods.CloseableHttpResponse;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.client.methods.HttpUriRequest;  
import org.apache.http.client.methods.RequestBuilder;  
import org.apache.http.impl.client.CloseableHttpClient;  
import org.apache.http.impl.client.HttpClients;  import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.net.URI;  
import java.net.URISyntaxException;  
import java.util.HashMap;  
import java.util.Map;  
import java.util.Map.Entry;  /** * * Created by lewis on 2016/10/16. */  
public class HttpClientCrawlerImpl implements ICrawl{  public CloseableHttpClient httpClient = HttpClients.custom().build();           //创建定制HttpClient  @Override  public CrawlResultPojo crawl(UrlPojo urlpojo) {  if(urlpojo==null){  return null;  }  CrawlResultPojo crawlResultPojo = new CrawlResultPojo();                //结果集  CloseableHttpResponse response = null;                                  //HTTP返回的各种信息集合,包含协议http标准,httpcode状态码  BufferedReader br = null;                                               //  try {  HttpGet httpGet = new HttpGet(urlpojo.getUrl());  response = httpClient.execute(httpGet);  HttpEntity entity = response.getEntity();                                       //获取输入流  InputStreamReader isr = new InputStreamReader(entity.getContent(),"utf-8");     //字节流转化为字符流,设置编码  br =new BufferedReader(isr);  String line =null;  StringBuilder context = new StringBuilder();  while((line=br.readLine())!=null){  context.append(line+"\n");  }  crawlResultPojo.setSuccess(true);  crawlResultPojo.setPageContent(context.toString());  return crawlResultPojo;  } catch (IOException e) {  e.printStackTrace();  crawlResultPojo.setSuccess(false);  }finally {  try {  if (br!=null)  br.close();                                                                 //关闭流  if(response!=null)  response.close();  } catch (IOException e) {  e.printStackTrace();  }  }  return crawlResultPojo;  }  /** * 带参数post的urlpojo * */  public CrawlResultPojo crawl4Post(UrlPojo urlPojo){  if(urlPojo==null||urlPojo.getUrl()==null){  return null;  }  CrawlResultPojo crawlResultPojo = new CrawlResultPojo();  BufferedReader br= null;  try {  RequestBuilder rb = RequestBuilder.post().setUri(new URI(urlPojo.getUrl()));  Map<String,Object> parasMap = urlPojo.getParasMap() ;  if(parasMap!=null){  for(Entry<String,Object> entry:parasMap.entrySet()){  rb.addParameter(entry.getKey(),entry.getValue().toString());  }  }  HttpUriRequest httpUriRequest = rb.build();  HttpEntity entity =httpClient.execute(httpUriRequest).getEntity();  InputStreamReader isr=new InputStreamReader(entity.getContent(),"utf-8");  br = new BufferedReader(isr);  String line = null;  StringBuilder stringBuilder = new StringBuilder();  while((line=br.readLine())!=null){  stringBuilder.append(line+"\n");  }  crawlResultPojo.setPageContent(stringBuilder.toString());  crawlResultPojo.setSuccess(true);  return crawlResultPojo;  } catch (URISyntaxException e) {  e.printStackTrace();  } catch (ClientProtocolException e) {  e.printStackTrace();  } catch (IOException e) {  e.printStackTrace();  } finally {  try {  if(br!=null)  br.close();  } catch (IOException e) {  e.printStackTrace();  }  }  crawlResultPojo.setSuccess(false);  return crawlResultPojo;  }  public static void main(String []args){  HttpClientCrawlerImpl httpClientCrawlerImpl = new HttpClientCrawlerImpl();  String url = "http://www.wangdaizhijia.com/front_select-plat";  UrlPojo urlPojo = new UrlPojo(url);  Map<String, Object> parasMap = new HashMap<String, Object>();  int max_page_number = 1000;  parasMap.put("currPage", 30);  parasMap.put("params", "");  parasMap.put("sort", 0);  urlPojo.setParasMap(parasMap);  CrawlResultPojo resultPojo = httpClientCrawlerImpl.crawl4Post(urlPojo);  print(resultPojo);  resultPojo=httpClientCrawlerImpl.crawl(urlPojo);  print(resultPojo);  }  public static void print(Object s){  System.out.println(s);  }  }  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/329246.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络中的最小二乘_深度神经网络:噪声中解读出科学

该研究介绍了一种基于深度神经网络的基本新方法&#xff0c;以基于已知的物理模型将函数形式拟合到噪声数据。来自美国橡树林国家实验室的Stephen Jesse领导的团队&#xff0c;提出了一种新的方法&#xff0c;可用来逆向解决问题&#xff0c;可从基于光谱成像数据的最小二乘拟合…

微软开放Holographic平台,意在统一VR的操作系统?

在刚刚结束的台北电脑展上&#xff0c;微软没有发布很多新品&#xff0c;而是宣布向第三方开放Windows Holographic&#xff08;全息&#xff09;平台&#xff0c;鼓励其他VR/AR头显使用该平台。近日外媒engadget发表文章&#xff0c;文中作者讲述了微软的野心&#xff0c;有意…

java爬虫的2种爬取方式(HTTP||Socket)简单Demo(一)

转载自 java爬虫的2种爬取方式&#xff08;HTTP||Socket&#xff09;简单Demo(一)最近在找java的小项目自己写着玩&#xff0c;但是找不到合适的&#xff0c;于是写开始学一点爬虫&#xff0c;自己也是感觉爬虫比较有趣。这里自己找了一个教程&#xff0c;这一次写的是基于Sock…

linux mysql复制一个表结构图_详解Windows和Linux下从数据库导出表结构,以及Linux下如何导入.sql文件到MySQL数据库...

本文首先讲解window下如何使用Navicat for MySQL导出表。1、如下图所示&#xff0c;目标数据库是mydatabase&#xff0c;数据库中有四张表。2、选中该数据库&#xff0c;右键——数据传输。3、左边可以选择要导出哪几张表&#xff0c;右边选择.sql文件的存储位置。4、在高级中&…

基于Jenkins快速搭建持续集成环境

看了园友张善友的博文,尝试成功.便有此作.原网址: 基于 Jenkins 快速搭建持续集成环境 天下事有难易乎?为之,则难者亦易矣&#xff1b;不为,则易者亦难矣. 首先要学会使用MSBuild构建脚本 附网址:http://www.infoq.com/cn/articles/MSBuild-1. 目标:学会用MSBuild编译程序,主要…

零基础写Java知乎爬虫之进阶篇

转载自 零基础写Java知乎爬虫之进阶篇前面几篇文章&#xff0c;我们都是简单的实现了java爬虫抓取内容的问题&#xff0c;那么如果遇到复杂情况&#xff0c;我们还能继续那么做吗&#xff1f;答案当然是否定的&#xff0c;之前的仅仅是入门篇&#xff0c;都是些基础知识&#x…

MySQL导入冲突保留两者_面试被问MySQL 主从复制,怎么破?

一、前言随着应用业务数据不断的增大&#xff0c;应用的响应速度不断下降&#xff0c;在检测过程中我们不难发现大多数的请求都是查询操作。此时&#xff0c;我们可以将数据库扩展成主从复制模式&#xff0c;将读操作和写操作分离开来&#xff0c;多台数据库分摊请求&#xff0…

“.Net 社区虚拟大会”(dotnetConf) 2016 Day 1 Keynote: Scott Hunter

“.Net 社区虚拟大会”(dotnetConf) 2016 今天凌晨在Channel9 上召开&#xff0c;在Scott Hunter的30分钟的 Keynote上没有特别的亮点&#xff0c;所讲内容都是 微软“.Net社区虚拟大会”dotnetConf2015&#xff1a;关键词&#xff1a;.NET 创新、开源、跨平台 的具体化&#x…

Java(enum)枚举用法详解

转载自 Java&#xff08;enum&#xff09;枚举用法详解本篇文章主要介绍了Java 枚举用法详解&#xff0c;枚举的好处&#xff1a;可以将常量组织起来&#xff0c;统一进行管理。有兴趣的可以一起来了解一下。概念 enum的全称为 enumeration&#xff0c; 是 JDK 1.5 中引入的新特…

python处理脑电信号_用ICA去除脑电信号中的眼球链接

你有没有注意到你的“组件”完全是原始信号的比例和颠倒&#xff1f;这是因为你不能得到比信号更多的成分。在您需要执行以下步骤&#xff1a;将所有EEG通道输入ICA手动移除包含眨眼或其他伪影的组件用反变换重构让我们详细了解第2步&#xff1a;为什么要手动删除组件&#xff…

ASP.NET Core 中文文档 第一章 入门

原文&#xff1a;Getting Started翻译&#xff1a;娄宇(Lyrics)校对&#xff1a;刘怡(AlexLEWIS) 1、安装 .NET Core 2、创建一个新的 .NET Core 项目&#xff1a; mkdir aspnetcoreappcd aspnetcoreapp dotnet new 3、编辑 project.json 文件&#xff0c;添加 Kestrel HTTP se…

Properties文件的XML格式

转载自 Properties文件的XML格式 想必大家都用过*.properties文件&#xff0c;作为配置文件。但是&#xff0c;如果该文件写入了中文&#xff0c;待编译后内容就会成为乱码&#xff0c;使用native命令也好、使用ant执行编码转换也好&#xff0c;多少有点麻烦&#xff0c;与其如…

python简单爬虫课题_VS2019python爬虫入门

VS2019新建python项目在vs2019中添加python编译环境创建python控制台应用程序项目配置python环境安装requests第三方库管理程序包&#xff0c;执行安装requests包命令pip install requests导入第三方包import requests简单爬虫编写import requestsif __name__ "__main__&…

“.Net 社区虚拟大会”(dotnetConf) 2016 Day 2 Keynote: Miguel de Icaza

美国时间 6月7日--9日&#xff0c;为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开&#xff0c;美国时间6.8 是第二天&#xff0c; Miguel de Icaza 做Keynote&#xff0c;Miguel 在波士顿Xamarin的办公室&#xff0c;所以使用了Skype。 class"video_iframe" …

Java泛型总结

转载自 Java泛型总结 Java泛型是JDK5引入的一个新特性&#xff0c;允许在定义类和接口的时候使用类型参数&#xff08;type parameter&#xff09;。声明的类型参数在使用的时候使用具体的类型来替换。泛型最主要的应用是在JDK5中的新集合类框架中。对于泛型概念的引入&#xf…

用 Visual Studio Code 在 macOS 上创建首个 ASP.NET Core 应用程序

原文&#xff1a;Your First ASP.NET Core Application on a Mac Using Visual Studio Code作者&#xff1a;Daniel Roth、Steve Smith 以及 Rick Anderson翻译&#xff1a;赵志刚校对&#xff1a;何镇汐、刘怡(AlexLEWIS) 本节将展示如何在 macOS 平台上创建首个 ASP.NET Core…

linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法

一、下载地址本文安装的版本&#xff1a;或者使用wget下载&#xff1a;[rootlocalhost opt]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-el7-x86_64.tar.gz[rootlocalhost opt]# tar -xvf mysql-5.7.32-el7-x86_64.tar.gz二、检查是否已经安装过mysql[…

Java 8 新特性:扩展注解(类型注解和重复注解)

转载自 Java 8 新特性&#xff1a;扩展注解&#xff08;类型注解和重复注解&#xff09;&#xff08;注&#xff1a;先回顾下JDK1.5版本出现的注解 &#xff0c;然后再解释JDK 8的注解 更新内容。&#xff09; 一.注解&#xff08;JDK1.5&#xff09; 1.注解&#xff08;&…

框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...

Idea简单SpringMVC框架配置前边已经介绍过了Struts在Idea上的配置,相对于Struts来说,我觉得SpringMVC有更多的优势,首先Struts是需要对action进行配置,页面发送不同的请求,就需要配置不同的acti ...hibernate学习之一 框架配置hibernate 框架 1.hibernate框架应用在javaee三层结…

“.Net 社区虚拟大会”(dotnetConf) 2016 Day 3 Keynote: Scott Hanselman

美国时间 6月7日--9日&#xff0c;为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开&#xff0c;美国时间6.9 是第三天&#xff0c; Scott Hanselman 做Keynote。今天主题围绕的是.NET OpenSource 展开&#xff0c;Hanselman通过PowerBI分析了.NET社区这两年的发展&#…