抓jsoup_01_方案代码

1、方案选择:

  1.1、HttpClient库 获取 原始的 json数据

  1.2、JSON库 取得 我们需要的HTML内容

  1.3、使用 jsoup 解析 我们取得的HTML内容

2、不直接使用 jsoup,原因:

  2.1、它会自动补全 HTML的头和尾(<html/><body/>等),jsoup中没有这个

    处理方法:手动指定 Parser.xmlParser()

  2.2、如果属性 没有用 2个双引号包裹起来,它会将 这2个双引号补全... 这个功能 在jsoup里面没法关闭...

3、示例代码:

  3.1、工具类

package z_utils;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class TzHttpClient
{
    public static void main(String[] args) throws Exception
    {
        String strRtn = PostZ(
            "http://ajax.mianbao99.com/vod-showlist-id-8-order-time-c-3719-p-2.html",
            null,
            true);
        System.out.println(strRtn);
    }

// ***

    @SuppressWarnings("deprecation")
    public static String PostZ(String _strUrl, String _strParam, boolean _bNeedResponse) throws Exception
    {
        //post请求返回结果
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost method = new HttpPost(_strUrl);
        if (null != _strParam)
        {
            //解决中文乱码问题
            StringEntity entity = new StringEntity(_strParam, "utf-8");
            entity.setContentEncoding("UTF-8");
            entity.setContentType("application/json");
            method.setEntity(entity);
        }
        HttpResponse result = httpClient.execute(method);
        /**请求发送成功,并得到响应**/
        if (result.getStatusLine().getStatusCode() == 200)
        {
            if (! _bNeedResponse)
                return null;
            String str = EntityUtils.toString(result.getEntity());
            //System.out.println(str);
            return str;
        }
        return null;
    }

    @SuppressWarnings("deprecation")
    public static String GetZ(String _strUrl) throws Exception
    {
        DefaultHttpClient client = new DefaultHttpClient();
        //发送get请求
        HttpGet request = new HttpGet(_strUrl);
        HttpResponse response = client.execute(request);

        /**请求发送成功,并得到响应**/
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK)
        {
            /**读取服务器返回过来的json字符串数据**/
            String strResult = EntityUtils.toString(response.getEntity());
            //System.out.println(strResult);
            return strResult;
        }
        System.out.println("get请求提交失败:" + _strUrl);
        return null;
    }
}

  3.2、测试 功能代码

package test;

import org.jsoup.Connection;
///import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.*;
import org.jsoup.parser.Parser;

import net.sf.json.*;
import z_utils.TzHttpClient;

public class Ttest01
{
    public static void main(String[] args) throws Exception
    {
        String strHtml = TzHttpClient.GetZ("http://ajax.mianbao99.com/vod-showlist-id-8-order-time-c-3719-p-2.html");
        JSONObject jsoupObj = JSONObject.fromObject(strHtml);
        if (! jsoupObj.containsKey("ajaxtxt"))
            return;

//        Connection conn = null;
//        conn.parser(Parser.xmlParser());
        String strAjaxtxt = jsoupObj.getString("ajaxtxt");
        Document doc =  Jsoup.parse(strAjaxtxt, "", Parser.xmlParser());
        System.out.println(doc.html());
    }

}

4、

时间: 2024-08-09 10:36:49

抓jsoup_01_方案代码的相关文章

基于angularJs的单页面应用seo优化及可抓取方案原理分析

公司使用angularJs(以下都是指ng1)框架做了互联网应用,之前没接触过seo,突然一天运营那边传来任务:要给网站做搜索引擎优化,需要研发支持.搜了下发现单页面应用做seo比较费劲,国内相关实践资料分享出来的也比较少,略懵,前后花了一番功夫总算完成了.在这里记录下来,做一个总结,也希望能够帮助在做类似工作的朋友少走一点弯路.还是建议需要seo的网站技术选型尽量不要使用angular react一类的单页面框架.如果你和我一样网站做完了发现需要seo,那么往下看吧.如果各位已有更优的方案欢迎

MFC抓取网页代码简单版。

最近又在网上找了一些有关MFC抓取网页代码的文章看,发现有个比较简单的代码,和大家分享下. CInternetSession session(NULL, 0); CHttpFile* htmlFile = NULL; CString strLine, strHtml; CString url = _T("http://www.tqyb.com.cn/data/gzWeather/gz_weatherForecastInDays.js?"); TCHAR sRecv[1024]; UIN

MFC抓取网页代码。

本人是初学MFC,这几天都要弄怎么抓取网页代码,一开始是一头雾水,不过最后多亏网上的丰富资源,让我有所收获,我也帮助新手们,下面是我自己参考网上资料所得的. 1 #pragma once 2 3 4 //抓取网页代码封装类 5 6 #include <afxinet.h> //所需要的函数的头文件. 7 8 9 class CGetInternet 10 { 11 public: 12 CGetInternet(); 13 virtual ~CGetInternet(); 14 15 //添加

某宝app抓包之代码实现

分析客户端代码 通过jeb打开apk获知,核心通信包使用的是mtop sdk,普通抓包工具charles.findler无法捕获相应包的根本原因在于,其采用了网络加载速度表现更卓越的SPDY协议,因此,需要阻止其使用该协议,才能抓包. 代码实现 只需让sdk的全局配置中执行下面这行代码即可: SwitchConfig.getInstance().setGlobalSpdySwitchOpen(false) 抓包效果 有对具体细节感兴趣的可以通过名字联系我. 原文地址:https://www.cn

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys

【最新原创】中国移动(中国联通)_通信账单,详单,个人信息抓取爬虫代码

概要: 1.因为公司需要,就花了一点时间写了一下三大运营商通信数据的抓取,涉及到Web上你所看得到的一切数据. 代码没啥技术含量,重点在于抓包分析过程.期间遇到了很多未知的困难,都一一克服了. 2.由于抓取数据的隐私性,我们的抓包是假设在用户已知自己数据被抓取,并且同意告知短信验证码的情况下进行的, 不属于黑客范畴! 3.整个过程,包括重建数据库表结构,解析json等如同逆向运营商的数据库一般.总体来说,三大运营商更新频率不算频繁,还算较稳定,数据结构,网页结构等都不会做很大的变动. 整体效果如

jquery抓娃娃机代码

<html><head><title>jQuery抓娃娃机游戏代码 - 源码之家</title><meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css&qu

java抓取网页代码

代码如下 import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; public class Main { private String u; private String encoding; public static void main(String[] args) throws Exception { Mai

用流从一个指定的网址抓取html代码

package cn.bdqn.collect.test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; public class TestGetHTML { public static void main(String[] args)throws Exc