jsoup爬虫发送get、post请求、解析html、获取json

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: jsoup爬虫发送get、post请求、解析html、获取json

@[TOC]

1 简介

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

  • 依赖

          <dependency>
              <groupId>org.jsoup</groupId>
              <artifactId>jsoup</artifactId>
              <version>1.8.3</version>
          </dependency>
    

    官网地址:https://jsoup.org/apidocs/org/jsoup/nodes/Element.html

    2 发送get请求

    2.1设置请求头和cookie

      public static void main(String[] args) throws IOException {
         
          doGet("","");
      }
    
      public static void doGet(String url ,String cookie) throws IOException {
         
          url = "https://www.baidu.com/";
          cookie = "BIDUPSID=56C4FFBF72723876ACBD5B2EA2C75AD8; PSTM=1669362017; BD_UPN=12314753; BAIDUID=F4A7FCF34D70EE033317D31778290FE0:FG=1; ZFY=bMkQzdDwo03XIz75dDC8:AwpdCLhCOaBeWmYRxguNzHQ:C; BAIDUID_BFESS=F4A7FCF34D70EE033317D31778290FE0:FG=1; baikeVisitId=a61698de-af11-451a-8f37-7a0efc41ef7c; __bid_n=184d169de2c1b652e44207; RT=\"z=1&dm=baidu.com&si=7ao2cg4efas&ss=lb63h3q0&sl=3&tt=2hm&bcn=https://fclog.baidu.com/log/weirwood?type=perf&ld=31p&ul=18ia&hd=18ka\"; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; COOKIE_SESSION=439025_2_8_9_12_10_0_0_8_6_0_0_459518_56535_3_0_1670314644_1669853798_1670314641|9#56556_3_1669853666|2; BA_HECTOR=24a484ah0k84258h0h852gj41hovnrf1g; ab_sr=1.0.1_ODA0NTY3OGYzMmViNzMyNGQ1YWU1MzhjZDc1YjM2ZjQ0MjlkZjlhOTI2ZjZjMjk1N2NlODAzNjg5YjRlNDQxNjUzZjQ2M2JkZDYwOWQ2Y2Q1MDI4NzRhNjRkM2RjYmQxOGNiNjZhMTk0YjFhZThmMmE4ZjljN2MyMzJmOWFhOWNlMTk3MmZjNTcyNjNkN2RhYjQ3M2Y1MjNlMjViNjcyOQ==; BDRCVFR[PGnakqNNAQT]=mk3SLVN4HKm; BD_HOME=1; H_PS_PSSID=37856_36560_36920_37835_37841_37871_37765_37797_37760_37853_26350_22160_37881; delPer=0; BD_CK_SAM=1; PSINO=1; H_PS_645EC=35d9T+b4lE+jHT8VNaqK1aghA5CXp4Yf4fqDSH/hRVMSETsPPBQsOh069iA";
          //获取请求连接
          Connection con = Jsoup.connect(url);
          //请求头设置,特别是cookie设置
          con.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
          con.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36");
          con.header("Host","www.baidu.com");
          con.header("Referer","https://www.baidu.com/link?url=Su25Siv6Fi0gZJgDQoDcxse30NxOOLSSqQcNy0k6FU3&wd=&eqid=d8ed532b000af73400000003638feddc");
          con.header("Cookie", cookie);
          //解析请求结果
          Document doc = con.get();
          //获取标题
          System.out.println(doc.title());
          //输出网页
    //        System.out.println(doc.toString());
      }
    

    2.2 设置请求参数

          //获取请求连接
          Connection conn = Jsoup.connect("http://www.cnblogs.com/zhangfei/p/");
          //请求参数设置
          conn.data("page","3");
          //获取请求结果
          Document doc = conn.get();
    

    2.3 获取登录后的cookie、response

    public static String doGetResponse(String url,String cook,String header) throws IOException{
         
          //获取请求连接
          Connection con = Jsoup.connect(url);
          //请求头设置,特别是cookie设置
          con.header("Accept", "text/html, application/xhtml+xml, */*");
          con.header("Content-Type", "application/x-www-form-urlencoded");
          con.header("User-Agent", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0))");
          con.header("Cookie", cook);
          //发送请求
          Response resp=con.method(Method.GET).execute();
          //获取cookie名称为__bsi的值
          String cookieValue = resp.cookie("__bsi");
          System.out.println("cookie  __bsi值:  "+cookieValue);
          //获取返回cookie所值
          Map<String,String> cookies = resp.cookies();
          System.out.println("所有cookie值:  "+cookies);
          //获取返回头文件值
          String headerValue = resp.header(header);
          System.out.println("头文件"+header+"的值:"+headerValue);
          //获取所有头文件值
          Map<String,String> headersOne =resp.headers();
          System.out.println("所有头文件值:"+headersOne);
          return headerValue; 
      }
    

    3 发送post请求

    3.1 发送post请求返回body

    public static String doPost(String url,Map<String,String> map,String cookie) throws IOException{
         
          //获取请求连接
          Connection con = Jsoup.connect(url);
          //遍历生成参数
          if(map!=null){
         
              for (Entry<String, String> entry : map.entrySet()) {
         
                 //添加参数
                  con.data(entry.getKey(), entry.getValue());
                 }
          }
          //插入cookie(头文件形式)
          con.header("Cookie", cookie);
          Document doc = con.post();
          System.out.println(doc);
          return doc.toString();
      }
    

    3.2 发送post请求获取cookie、response

    //发送请求
          Response resp=con.method(Method.POST).execute();
          //获取cookie名称为__bsi的值
          String cookieValue = resp.cookie(header);
          System.out.println(cookieValue);
    

    3.3 发送json参数,application/json; charset=UTF-8

          //获取请求连接
          Connection con = Jsoup.connect(url);
          //这里用了阿里的fastjson2
          JSONObject jsonObject = new JSONObject();
          jsonObject.put("name","迪迦");
          con.requestBody(jsonObject.toString());
          //解析请求结果,这里忽略contentType检查,不然会默认为application/x-www-form-urlencoded
          Connection.Response response = con.ignoreContentType(true).method(Connection.Method.POST).execute();
    

    4 Document的使用

    4.1 使用DOM的方式来取得

      getElementById(String id)//通过id来获取
      getElementsByTag(String tagName)//通过标签名字来获取
      getElementsByClass(String className)//通过类名来获取
      getElementsByAttribute(String key)//通过属性名字来获取
      getElementsByAttributeValue(String key, String value)//通过指定的属性名字,属性值来获取
      getAllElements()//获取所有元素
    

    4.2 通过类似于css或jQuery的选择器来查找元素

    ```java
    public Elements select(String cssQuery)

//举例
Elements links = doc.select("a[href]"); //带有href属性的a元素
Elements pngs = doc.select("img[src$=.png]");

## 4.3 从Element对象中,取出我们真正需要的内容
```java
Element.text()
//这个方法用来取得一个元素中的文本。
Element.html()或Node.outerHtml()
//这个方法用来取得一个元素中的html内容
Node.attr(String key)
//获得一个属性的值,例如取得超链接<a href="">中href的值

4.4 示例

        //爬取搜索页面的图片、书名、价格、出版社
        //获取请求
        String url = "https://search.jd.com/Search?keyword=java";
        // 解析网页 (Jsou返回的Document就是浏览器的Docuement对象)
        Document document = Jsoup.parse(new URL(url), 30000);
        //获取id,所有在js里面使用的方法在这里都可以使用
        Element element = document.getElementById("J_goodsList");
        //获取所有的li元素
        Elements elements = element.getElementsByTag("li");
        //用来计数
        int c = 0;
        //获取元素中的内容  ,这里的el就是每一个li标签
        for (Element el : elements) {
   
            c++;
            //这里有一点要注意,直接attr使用src是爬不出来的,因为京东使用了img懒加载
            String img = el.getElementsByTag("img").eq(0).attr("data-lazy-img");
            //获取商品的价格,并且只获取第一个text文本内容
            String price = el.getElementsByClass("p-price").eq(0).text();
            String title = el.getElementsByClass("p-name").eq(0).text();
            String shopName = el.getElementsByClass("p-shopnum").eq(0).text();
            //打印爬取结果
            log.info("{}-{}-{}-{}",img,price,title,shopName);
        }
        return "";
目录
相关文章
|
6天前
|
数据采集 Web App开发 监控
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫
在现代网络爬虫实践中,动态网页加载和反爬虫机制增加了数据采集的难度。采用无头浏览器技术(如Selenium与ChromeDriver)可有效模拟用户行为、执行JavaScript,获取动态内容。通过设置代理IP、伪装User-Agent和处理Cookies,提升爬虫隐蔽性和稳定性。该方案适用于电商价格监控、社交媒体数据采集和招聘信息抓取等场景,实现更高效的数据获取。
深度解析:使用ChromeDriver和webdriver_manager实现无头浏览器爬虫
|
6天前
|
数据采集 前端开发 API
SurfGen爬虫:解析HTML与提取关键数据
SurfGen爬虫:解析HTML与提取关键数据
|
1月前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
28天前
|
JSON 小程序 UED
微信小程序 app.json 配置文件解析与应用
本文介绍了微信小程序中 `app.json` 配置文件的详细
132 12
|
29天前
|
JSON 缓存 API
解析电商商品详情API接口系列,json数据示例参考
电商商品详情API接口是电商平台的重要组成部分,提供了商品的详细信息,支持用户进行商品浏览和购买决策。通过合理的API设计和优化,可以提升系统性能和用户体验。希望本文的解析和示例能够为开发者提供参考,帮助构建高效、可靠的电商系统。
39 12
|
1月前
|
数据采集 供应链 API
Python爬虫与1688图片搜索API接口:深度解析与显著收益
在电子商务领域,数据是驱动业务决策的核心。阿里巴巴旗下的1688平台作为全球领先的B2B市场,提供了丰富的API接口,特别是图片搜索API(`item_search_img`),允许开发者通过上传图片搜索相似商品。本文介绍如何结合Python爬虫技术高效利用该接口,提升搜索效率和用户体验,助力企业实现自动化商品搜索、库存管理优化、竞品监控与定价策略调整等,显著提高运营效率和市场竞争力。
83 3
|
2月前
|
JSON JavaScript 前端开发
一次采集JSON解析错误的修复
两段采集来的JSON格式数据存在格式问题,直接使用PHP的`json_decode`会报错。解决思路包括:1) 手动格式化并逐行排查错误;2) 使用PHP-V8JS扩展在JavaScript环境中解析。具体方案一是通过正则表达式和字符串替换修复格式,方案二是利用V8Js引擎执行JS代码并返回JSON字符串,最终实现正确解析。 简介: 两段采集的JSON数据因掺杂JavaScript代码导致PHP解析失败。解决方案包括手动格式化修复和使用PHP-V8JS扩展在JavaScript环境中解析,确保JSON数据能被正确处理。
|
2月前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
2月前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
2月前
|
数据采集
动态代理与静态代理在爬虫解析的优缺点
随着科技和互联网的发展,越来越多企业需要使用代理进行数据抓取。本文介绍了HTTP动态代理与静态代理的区别,帮助您根据具体需求选择最佳方案。动态代理适合大规模、高效率的爬取任务,但稳定性较差;静态代理则适用于小规模、高稳定性和速度要求的场景。选择时需考虑目标、数据量及网站策略。
65 4

热门文章

最新文章

推荐镜像

更多