推荐一本书:黑客攻防技术宝典.Web实战篇  ;

      顺便留下一个疑问:能否通过jsoup大量并发訪问web或者小型域名server,使其瘫痪?其有用jsoup熟悉的朋友能够用它解析url来干一件非常无耻的事(源代码保密)。呵呵。接下来简单的介绍下JSOUP。

jsoup 是一款基于Java 的HTML解析器。可直接解析某个URL地址、HTML文本字符串、HTML文件。它提供了一套很省力的API。可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

官网下载地址:http://jsoup.org/download,下载core library。导入项目

  1:解析HTML文本字符串

[java] view plaincopy
  1. /**
  2. * 解析一个html文档。

    String类型

  3. */
  4. ublic static void parseStringHtml(String html) {
  5. Document doc = Jsoup.parse(html);//把String转化成document格式
  6. Elements e=doc.body().getAllElements();//获取所以body下的节点集
  7. Elements e1=doc.select("head");//获取head 节点集
  8. Element e2=doc.getElementById("p");//获取html上id=“p”的节点
  9. System.out.println(e1);

2:解析url。

这部分是重点

,有部分网址不一定都能直接获取连接。for example  :CSDN这样的域名站点。这样的一定要设置消息头代理。    否则报错:像HTTP error fetching URL. Status=403。

等http状态异常

。详细HTTP状态返回码可參照最后部分,或者推荐的那本书

[java] view plaincopy
  1. /**
  2. * 通过请求地址获取html
  3. */
  4. public static void parseRequestUrl(String url) throws IOException{
  5. Connection con = Jsoup.connect(url);//获取请求连接
  6. //      //浏览器可接受的MIME类型。
  7. //      con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
  8. //      con.header("Accept-Encoding", "gzip, deflate");
  9. //      con.header("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
  10. //      con.header("Connection", "keep-alive");
  11. //      con.header("Host", url);
  12. //      con.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:26.0) Gecko/20100101 Firefox/26.0");
  13. Document doc=con.get();
  14. Elements hrefs=doc.select("a[href=/kff517]");  //节点后面属性 不须要
  15. Elements test=doc.select("html body div#container div#body div#main div.main div#article_details.details div.article_manage span.link_view");
  16. System.out.println(hrefs);
  17. System.out.println(test.text());//==.html获取节点中的文本,类似于js中的方法
  18. }

3:解析一个本地html文件。这个大同小异,改变下DOCUMENT的获取方式。


整理了一些关于HTTP 消息头资料:

GET /simple.htm HTTP/1.1<CR>  ---请求方式。请求对象。请求http协议
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*<CR>      --指浏览器能接收的Content-type
Accept-Language: zh-cn<CR>   ---接收语言
Accept-Encoding: gzip, deflate<CR>   --接收编码
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)<CR>    本机的相关系信息。包含浏览器类型、操作系统信息等,非常多站点能够显示出你所使用的浏览器和操作系统版本号,就是由于能够从这里获取到这些信息。
Host: localhost:8080<CR> 主机和port,在互联网上一般指域名
Connection: Keep-Alive<CR> 是否须要持久连接
<CR>

server发回的完整HTTP消息例如以下:
HTTP/1.1 200 OK<CR>    ---HTTP/1.1 表示表示所用的协议。200OK 指server返回的状态码。正常返回
Server: Microsoft-IIS/5.1<CR>   
X-Powered-By: ASP.NET<CR>
Date: Fri, 03 Mar 2006 06:34:03 GMT<CR>   
Content-Type: text/html<CR>
Accept-Ranges: bytes<CR>
Last-Modified: Fri, 03 Mar 2006 06:33:18 GMT<CR>
ETag: "5ca4f75b8c3ec61:9ee"<CR>
Content-Length: 37<CR>
<CR>
<html><body>hello world</body></html>

注意:<CR>是我加上去代表换行的。能够删掉,没有意义

HTTP请求头概述 
   HTTP客户程序(比如浏览器。向server发送请求的时候必须指明请求类型(通常是GET或者POST。如必要。客户程序还能够择发送其它的请求头。

大多数请求头并非必需的,但Content- Length除外。对于POST请求来说Content-Length必须出现。

 以下是一些最常见的请求头

  Accept:浏览器可接受的MIME类型。 表示我们所用的浏览器能接受的Content-type
   Accept-Charset:浏览器可接受的字符集。 
   Accept-Encoding:浏览器可以进行解码的数据编码方式。比方gzip。Servlet可以向支持gzip的浏览器返回经gzip编码的HTML页面。

很多情形下这可以降低5到10倍的下载时间。 
   Accept-Language:浏览器所希望的语言种类,当server可以提供一种以上的语言版本号时要用到。

   Authorization:授权信息,通常出如今对server发送的WWW-Authenticate头的应答中。 
   Connection:表示是否须要持久连接。假设Servlet看到这里的值为"Keep-Alive",或者看到请求使用的是HTTP 1.1 (HTTP 1.1默认进行持久连接。它就能够利用持久连接的长处,当页面包括多个元素时(比如Applet,图片,显著地降低下载所须要的时间。要实现这一点,Servlet须要在应答中发送一个Content-Length头。最简单的实现方法是:先把内容写入 ByteArrayOutputStream。然后在正式写出内容之前计算它的大小。

   Content-Length:表示请求消息正文的长度。

   Cookie:这是最重要的请求头信息之中的一个
   From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。 
   Host:初始URL中的主机和port。

   If-Modified-Since:仅仅当所请求的内容在指定的日期之后又经过改动才返回它。否则返回304"Not Modified"应答。 
   Pragma:指定"no-cache"值表示server必须返回一个刷新后的文档,即使它是代理server并且已经有了页面的本地拷贝。 
   Referer:包括一个URL,用户从该URL代表的页面出发訪问当前请求的页面。 
     User-Agent:浏览器类型,假设Servlet返回的内容与浏览器类型关则该值很常使用。 
   UA-Pixels,UA-Color。UA-OS,UA-CPU:由某些版本号的IE浏览器所发送的非标准的请求头,表显示屏尺寸、颜色深度、操作系统和CPU种类。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Jsoup 抓取和数据页 认识HTTP头相关推荐

  1. Jsoup抓取网页数据完成一个简易的Android新闻APP

    前言:作为一个篮球迷,每天必刷NBA新闻.用了那么多新闻APP,就想自己能不能也做个简易的新闻APP.于是便使用Jsoup抓取了虎扑NBA新闻的数据,完成了一个简易的新闻APP.虽然没什么技术含量,但 ...

  2. Android之使用Jsoup抓取网络数据

    官方文档:http://www.open-open.com/jsoup/parsing-a-document.htm 例子:OSchinatest.zip

  3. php天猫列表数据抓取,如何翻页抓取网页数据——以采集天猫搜索列表为例

    我们在抓取数据时,通常不会只抓取网页当前页面的数据,往往都会继续抓取翻页后的数据.本文就为大家介绍,集搜客GooSeeker网络爬虫如何在进行数据抓取时,自动抓取翻页后的数据. 在MS谋数台的爬虫路线 ...

  4. android 获取手机a标签页,Android关于对Jsoup抓取a标签和br标签之间的解决办法...

    Jsoup官方给出的文档,链接:http://www.open-open.com/jsoup/ 描述问题: 学校教务处系统中,我想获取所有科目以及对应的成绩,因此我采用了Jsoup抓取 采集成绩:fe ...

  5. 知乎爬虫之4:抓取页面数据

    git爬虫项目地址( 终于上传代码了~~~~关注和star在哪里):https://github.com/MatrixSeven/ZhihuSpider(已完结) 附赠之前爬取的数据一份(mysql) ...

  6. java 爬数据工具 知乎_知乎爬虫之4:抓取页面数据

    本文由博主原创,转载请注明出处:知乎爬虫之4:抓取页面数据 咱们上一篇分析了知乎的登陆请求和如何拿到粉丝/关注的请求,那么咱们这篇就来研究下如何拿利用Jsoup到咱们想要的数据. 那么咱们说下,首先请 ...

  7. 抓取网页数据并解析Android

    抓取网页数据并解析 标签: 网页抓取jsoupAndroid 2016-03-02 13:54 1262人阅读 评论(1) 收藏 举报  分类: Android开发(原创)(7)  版权声明:本文为博 ...

  8. springboot+jsoup抓取新闻网站信息

    springboot+jsoup抓取新闻网站信息 步骤: 一.导入jar包 二.解析凤凰网新闻 jsoup获取动态生成的js内容 service serviceImpl mapper domian 步 ...

  9. 抓取网站数据入库详解,附图文

    抓取网站数据入库详解,附图文 一. 分析需求 1.1 需求分析 刚好有这样一个需求,去抓取下方网站的页面全部数据,并存入MySQL数据库. 这个页面为: 爬取页面 年月日选择 出生于几点,性别: 男或 ...

最新文章

  1. Ubuntu安装步骤
  2. 计划策略 : 40 / 20 测试
  3. 服务器里面发邮件,通过SMTP中继服务器发送邮件的问题
  4. 航空机票预订c#代码_航空公司座位预订问题的C ++程序
  5. 计算机办公应用软件初级,电脑办公软件有哪些?桌面便签办公软件基础教程
  6. 担心再次被起诉?马斯克已删除特斯拉可能几个月内成为最大公司推文
  7. ug区域轮廓铣没有重叠距离_UG编程轮廓铣的切削参数“清理几何体”,360°无死角扫除!...
  8. 牛客网 牛客练习赛7 A.骰子的游戏
  9. 在线下单系统php源码,PIMS在线订单管理系统v4.2.9
  10. visio如何粘附或取消粘附连接线
  11. 国内云服务市场正陷入混战
  12. 北邮电教授思想洗礼之不二之选TGB
  13. 系统集成项目管理工程师(中级)
  14. 抖音无水印视频抓取与按帧截取图片
  15. 设置Asterisk座席实时监控
  16. 活捉那只抢算力的谷歌员工!挤占计算资源?博弈论或可破解数据中心“囚徒困境”...
  17. 身份证照片扫描后调整使其不发黑
  18. 《信华广告产品生产管理软件》
  19. Javascript的单线程与多线程
  20. 真人版《美女与野兽》刚上映,迪士尼又推出同系列VR体验

热门文章

  1. 2013_chengdu_visit
  2. 376. 摆动序列 golang
  3. 有两个链表a,b,设结点包括学号,姓名。从a链表中删去与b链表中有相同学号的那些结点。
  4. 【Java学习笔记八】包装类和vector
  5. 【VS C++ 2010】查看内存的方法详解
  6. 1017. A除以B (20)
  7. C/C++中NULL指针
  8. c语言 字符转int型,C语言—类型之间的转换
  9. laravel数据库相关操作说明
  10. docker下用keepalived+Haproxy实现高可用负载均衡集群