文章目录

  • 1 简介
  • 2 发送get请求
    • 2.1设置请求头和cookie
    • 2.2 设置请求参数
    • 2.3 获取登录后的cookie、response
  • 3 发送post请求
    • 3.1 发送post请求返回body
    • 3.2 发送post请求获取cookie、response
    • 3.3 发送json参数,application/json; charset=UTF-8
  • 4 Document的使用
    • 4.1 使用DOM的方式来取得
    • 4.2 通过类似于css或jQuery的选择器来查找元素
    • 4.3 从Element对象中,取出我们真正需要的内容
    • 4.4 示例

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);//这里用了阿里的fastjson2JSONObject jsonObject = new JSONObject();jsonObject.put("name","迪迦");con.requestBody(jsonObject.toString());//解析请求结果,这里忽略contentType检查,不然会默认为application/x-www-form-urlencodedConnection.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的选择器来查找元素

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

4.3 从Element对象中,取出我们真正需要的内容

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 "";

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

  1. php如何获取ajax请求,php-从ajax调用获取json数据

    我的问题是:我的php脚本如何发送json类型数据 并收到返回成功或完成的功能? 我试图让this聊天功能在我的网站上工作 因为它不起作用,所以我在代码中创建了一个最小化部分以进行检查 如果与json ...

  2. 详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)

    一.介绍:何为爬虫 网络爬虫(Web crawler)也叫做网络机器人 可以代替人 自动地在互联网中进行数据信息的采集和整理 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 可以自动采集所有 ...

  3. 【Java】Jsoup爬虫,一个简单获取京东商品信息的小Demo

    简单记录 - Jsoup爬虫入门实战 数据问题?数据库获取,消息队列中获取中,都可以成为数据源,爬虫! 爬取数据:(获取请求返回的页面信息,筛选出我们想要的数据就可以了!) 我们经常需要分析HTML网 ...

  4. Java+Jsoup爬虫微博

    源码链接:https://pan.baidu.com/s/1oOAxJqSMCyVJPNv-iAYW7A 提取码:1co9 Java+Jsoup爬虫小红书,微博,B站 爬取地址:https://wei ...

  5. 通过JAVA从高德地图URL连接获取json数据 解析并存入数据库的程序举例

    首先 进入高德开放平台 按官网教程获取key 这里以杭州某区域车站信息举例 通过在线解析工具获取json格式的数据 通过此数据建立实体类 package geturl;import java.util ...

  6. 使用feign发送http请求解析报错

    错误如下: 发送请求开始 ----- [ChannelFeign#formRecog] ---> END HTTP (304117-byte body) 发送请求结束 返回开始 [Channel ...

  7. 爬虫实战学习笔记_4 网络请求urllib3模块:发送GET/POST请求实例+上传文件+IP代理+json+二进制+超时

    1 urllib3模块简介 urllib3是一个第三方的网络请求模块(单独安装该模块),在功能上比Python自带的urllib强大. 1.1了解urllib3 urllib3库功能强大,条理清晰的用 ...

  8. Java网络爬虫学习记录(请求基础篇)

    目录 个人实验遇见错误集: 一.javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX ...

  9. Python爬虫(一)_HTTP的请求与响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

  10. python爬虫(二)_HTTP的请求和响应

    HTTP和HTTPS HTTP(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收HTML页面的方法 HTTPS(HyperText Transfer Prot ...

最新文章

  1. postgresql 使用指南
  2. java jdk动态代理学习记录
  3. 一文搞懂 Java 泛型,非常详细!
  4. YOLOv5初探(看来这个YOLO5做得还不是很完善,过段时间再试试??)
  5. SQL基础【二、SQL语法】
  6. Java 算法训练 一元三次方程求解
  7. C++中如何使用大整数__int 128
  8. discuz mysql 编码_Discuz!X 下如何使用 Tools 来转换数据库编码
  9. JetBrains系列序列号
  10. linux中搭建git私有服务器
  11. 软考初级程序员---题目(三)
  12. java基于springboot+vue的网上购物商城系统
  13. 分屏 投影显示 PPT
  14. 离散分配方式——基本页式存储管理方式
  15. 微信账户在服务器删除不了怎么办,微信号注销不了怎么办 账户无法永久注销解决方法...
  16. OI生涯回忆录(Part8:至高一省选Day1)
  17. fastDFS图片服务器的一些常见错误
  18. 女孩学医好还是学计算机好,女生选择学医好吗 学医有多累
  19. Java8新特性(一)—————Lambda表达式
  20. 全网详细介绍nginx的反向代理、正向代理配置,location的指令说明,反向代理的两个示例代码以及全局块,events块和http快的说明。

热门文章

  1. @Secured注解验证无法通过的问题
  2. windows 无法停止ics_Win10系统ICS服务启动后停止怎么办
  3. python print函数用法_print函数的用法总结
  4. 资产证券化:国际借鉴与中国实践案例 读后感
  5. Eclipse从零开始搭建一个SpringBoot项目
  6. 模型剪枝学习笔记 --- EagleEye: Fast Sub-net Evaluation for Efficient Neural Network Pruning
  7. Win8.1在关机界面卡住无反应问题的解决
  8. 阿里云,腾讯云,保利威视,金山云,七牛云的视频云方案有什么不同啊?
  9. ecshop的dwt模板文件
  10. 并列关系表合集PPT模板