一、设置请求头消息 User-Agent模拟浏览器

  1.当使用第一节的代码 来 访问推酷的时候,会返回给我们如下信息:

网页内容:<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>系统检测亲不是真人行为,因系统资源限制,我们只能拒绝你的请求。如果你有疑问,可以通过微博 http://weibo.com/tuicool2012/ 联系我们。</p>
</body>
</html>

  这是因为网站做了限制,限制别人爬。解决方式可以设置请求头消息 User-Agent模拟浏览器。代码如下:

/**
* 抓取网页信息使用 get请求
* @param args
* @throws IOException
* @throws ClientProtocolException
*/
public static void main(String[] args) throws ClientProtocolException, IOException {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建httpGet实例
HttpGet httpGet = new HttpGet("http://www.tuicool.com");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");
CloseableHttpResponse response = httpClient.execute(httpGet);
if(response != null){
HttpEntity entity = response.getEntity(); // 获取网页内容
String result = EntityUtils.toString(entity, "UTF-8");
System.out.println("网页内容:" + result);
}
if(response != null){
response.close();
}
if(httpClient != null){
httpClient.close();
}
}

  给HttpGet方法设置头消息,即可模拟浏览器访问。

二、获取响应内容Content-Type  

  使用  entity.getContentType().getValue()  来获取Content-Type,代码如下:

public static void main(String[] args) throws ClientProtocolException, IOException {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建httpGet实例
HttpGet httpGet = new HttpGet("http://www.tuicool.com");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");
CloseableHttpResponse response = httpClient.execute(httpGet);
if(response != null){
HttpEntity entity = response.getEntity(); // 获取网页内容
System.out.println("Content-Type:" + entity.getContentType().getValue()); // 获取Content-Type
}
if(response != null){
response.close();
}
if(httpClient != null){
httpClient.close();
}
}

三、获取响应状态

  200 -- 正常

  403 -- 拒绝

  500 -- 服务器报错

  400 -- 未找到页面

  使用 response.getStatusLine().getStatusCode() 获取响应状态,代码如下:

public static void main(String[] args) throws ClientProtocolException, IOException {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
// 创建httpGet实例
HttpGet httpGet = new HttpGet("http://www.tuicool.com");
httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0");
CloseableHttpResponse response = httpClient.execute(httpGet);
if(response != null){
int state = response.getStatusLine().getStatusCode();
System.out.println("响应状态:" + state);
}
if(response != null){
response.close();
}
if(httpClient != null){
httpClient.close();
}
}

四、HttpClient学习地址

  开源博客系统-HttpClient

HttpClient(二)-- 模拟浏览器抓取网页的更多相关文章

  1. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  2. Selenium模拟浏览器抓取淘宝美食信息

    前言: 无意中在网上发现了静觅大神(崔老师),又无意中发现自己硬盘里有静觅大神录制的视频,于是乎看了其中一个,可以说是非常牛逼了,让我这个用urllib,requests用了那么久的小白,体会到sel ...

  3. 使用selenium模拟浏览器抓取淘宝信息

    通过Selenium模拟浏览器抓取淘宝商品美食信息,并存储到MongoDB数据库中. from selenium import webdriver from selenium.common.excep ...

  4. 3.使用Selenium模拟浏览器抓取淘宝商品美食信息

    # 使用selenium+phantomJS模拟浏览器爬取淘宝商品信息 # 思路: # 第一步:利用selenium驱动浏览器,搜索商品信息,得到商品列表 # 第二步:分析商品页数,驱动浏览器翻页,并 ...

  5. Python爬虫学习==>第十二章:使用 Selenium 模拟浏览器抓取淘宝商品美食信息

    学习目的: selenium目前版本已经到了3代目,你想加薪,就跟面试官扯这个,你赢了,工资就到位了,加上一个脚本的应用,结局你懂的 正式步骤 需求背景:抓取淘宝美食 Step1:流程分析 搜索关键字 ...

  6. 使用Selenium模拟浏览器抓取淘宝商品美食信息

    代码: import re from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...

  7. 16-使用Selenium模拟浏览器抓取淘宝商品美食信息

    淘宝由于含有很多请求参数和加密参数,如果直接分析ajax会非常繁琐,selenium自动化测试工具可以驱动浏览器自动完成一些操作,如模拟点击.输入.下拉等,这样我们只需要关心操作而不需要关心后台发生了 ...

  8. linux中使用wget模拟爬虫抓取网页

    如何在linux上或者是mac上简单使用爬虫或者是网页下载工具呢,常规的我们肯定是要去下载一个软件下来使用啦,可怜的这两个系统总是找不到相应的工具,这时wget出来帮助你啦!!!wget本身是拿来下载 ...

  9. 使用Selenium模拟浏览器抓取斗鱼直播间信息

    获取斗鱼直播间每个房间的名称.观看人数.tag.主播名字 代码: import time from multiprocessing import Pool from selenium import w ...

随机推荐

  1. Apache Storm内部原理分析

    转自:http://shiyanjun.cn/archives/1472.html 本文算是个人对Storm应用和学习的一个总结,由于不太懂Clojure语言,所以无法更多地从源码分析,但是参考了官网 ...

  2. snapshots On Vmware

    快照使用 编辑 如果你创建了多于一个的虚拟机快照,那么,你将有多个还原点可以用于恢复.当你创建了一个快照,那快照些现在可写的在那个点上就变成了只读的.使用in-file delta技术就能创建新文件记 ...

  3. pymysql.err.InternalError: (1054, "Unknown column 'None' in 'field list'")

    错误提示: Traceback (most recent call last): File "D:/projectwc/test/dd.py", line 43, in <m ...

  4. SpringMVC系列(十三)异常处理

    一.简介 • Spring MVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler 映射.数据绑定以及目标方法执行时发生的异常.• SpringMVC 提 ...

  5. Python:数组、队列及堆栈的使用(list用法)--转

    Python编程中数组.队列及堆栈用于保存一组数据或对象的序列,元素可以是各种类型混合在一起,定义格式为[元素,元素,……,元素],用变量[位置]即可取出相应的元素,其中“位置”是从零开始计算. 数组 ...

  6. C#基础---------------C#正则表达式2

    C#正则表达式语法规则详解 正则表达式基础知识        一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式.   字母文本指的是普通文本如"a ...

  7. C# 结构体 struct

    C# 结构体 struct C#中结构类型和类类型在语法上非常相似,他们都是一种数据结构,都可以包括数据成员和方法成员. 结构和类的区别: 1.结构是值类型,它在栈中分配空间:而类是引用类型,它在堆中 ...

  8. 分享9款最新超酷HTML5/CSS3应用插件

    新的一周开始了,小编继续要为大家分享实用超酷的HTML5应用,今天分享的这9款最新HTML5/CSS3应用你一定会很喜欢,一起来看看. 1.HTML5 Canvas模拟衣服撕扯动画 超级逼真 今天又要 ...

  9. tp5的学习

    1.安装,官网下载 2.访问配置:http://localhost/App/public/ 3.入口文件,项目目录/public // 定义应用目录 define('APP_PATH', __DIR_ ...

  10. Java JVM运行时数据区,内存管理和GC垃圾回收

    一 . 运行时数据区 程序计数器是线程私有的,是一块很小的内存空间,是当前线程执行到字节码行号的计数指示器.每个CPU处理器核心 在任何一个时刻,都只可能运行着唯一的一个线程,执行着一条指令.所以在多 ...