Jsoup 抓取和数据页 认识HTTP头

推荐一本书:黑客攻防技术宝典.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
plain
copy

  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
plain
copy

  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种类。

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

时间: 2024-10-01 07:22:22

Jsoup 抓取和数据页 认识HTTP头的相关文章

使用Jsoup抓取网页数据

Jsoup是一款Java的HTML解析器,可直接解析某个URL地址.HTML文本内容.它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据. 基本了解参考中文文档:http://www.open-open.com/jsoup/ 下面介绍一个具体例子: 比如我们要抓取:http://datacenter.mep.gov.cn/report/air_daily/air_dairy.jsp上某个时段的所有城市的天气信息并且保存为csv格式的文件. 在Chr

jsoup抓取网页+详细讲解

jsoup抓取网页+详细讲解 Java 程序在解析 HTML 文档时,相信大家都接触过 htmlparser 这个开源项目,我曾经在 IBM DW 上发表过两篇关于 htmlparser 的文章,分别是:从 HTML 中攫取你所需的信息和 扩展 HTMLParser 对自定义标签的处理能力.但现在我已经不再使用 htmlparser 了,原因是 htmlparser 很少更新,但最重要的是有了 jsoup . jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HT

java抓取网页数据,登录之后抓取数据。

最近做了一个从网络上抓取数据的一个小程序.主要关于信贷方面,收集的一些黑名单网站,从该网站上抓取到自己系统中. 也找了一些资料,觉得没有一个很好的,全面的例子.因此在这里做个笔记提醒自己. 首先需要一个jsoup的jar包,我用的1.6.0..下载地址为:http://pan.baidu.com/s/1mgqOuHa 1,获取网页内容(核心代码,技术有限没封装). 2,登录之后抓取网页数据(如何在请求中携带cookie). 3,获取网站的ajax请求方法(返回json). 以上这三点我就用一个类

正则表达式抓取新闻数据

抓取网站数据建议用服务操作,此例只实现从请求到拿数据,并把数据写入xml的功能 List<youcaimodel> _list = new List<youcaimodel>(); int page = 1000; //一共抓取1000页的数据 WebClient client = new WebClientto(3000); client.Credentials = CredentialCache.DefaultCredentials;  //获取或设置用于向Internet资源

iOS—网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求

scrapy递归抓取网页数据

scrapy spider的parse方法可以返回两种值:BaseItem,或者Request.通过Request可以实现递归抓取. 如果要抓取的数据在当前页,可以直接解析返回item(代码中带**注释的行直接改为yield item): 如果要抓取的数据在当前页指向的页面,则返回Request并指定parse_item作为callback: 如果要抓取的数据当前页有一部分,指向的页面有一部分(比如博客或论坛,当前页有标题.摘要和url,详情页面有完整内容)这种情况需要用Request的meta

【转载】用sas抓取网页数据简易版

链接:http://www.1point3acres.com/bbs/thread-91000-1-1.html 如果是一些比较简单的规则的网页抓取,可以用SAS,纯属娱乐,SAS入门的话推荐SAS BASE和ADVANCE认证的教材,这两个认证其实没啥用,但教材的内容对于一个专业的SAS Programmer足够了,sas data step, sql, macro,会这些日常处理应该都没问题了.%macro webScholar;/*memlib选项是将data放在内存里,而不是放在D盘,可

[Python爬虫] 之四:Selenium 抓取微博数据

抓取代码: # coding=utf-8import osimport refrom selenium import webdriverimport selenium.webdriver.support.ui as uifrom selenium.webdriver.common.keys import Keysimport timefrom selenium.webdriver.common.action_chains import ActionChainsimport IniFileclas

iOS开发——网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据

网络爬虫-使用java语言抓取网络数据 前提:熟悉java语法(能看懂就行) 准备阶段:从网页中获取html代码 实战阶段:将对应的html代码使用java语言解析出来,最后保存到plist文件 上一片文章已经介绍我们可以使用两个方式来抓取网络数据实现网络爬虫,并且大致介绍了一下怎么使用正则表达式去实现数据的抓取 由于笔者曾经学过一段时间java和android相关的技术,今天就讲讲怎么使用java去抓取网络数据,关于Python有机会等笔者好好研究一下再来分享,但其实会一种就可以,除非你的需求