当前位置: 首页 > news >正文

获取数据源(多种方式爬虫介绍)

获取不同类型的数据源:

对于看上的网站如何获取其信息:

1.分析原网站是如何获取到这些数据的?哪个接口?哪些参数?

2.用程序去调用接口(python/java都可以)

3.处理一些数据,优化数据传入数据库

java爬虫操作流程:

先创建一个实体类:根据网络上需要操作的请求的属性规定实体类属性一一对应。

爬取:https://www.code-nav.cn/learn/passage

数据抓取的几种方式:

1.直接去请求接口(最方便)HttpClient,OkHttp,Hutool,resttemplate

2.等网页渲染出明文内容后,从前端页面的内存抓取

3.有一些网站可能是动态请求的,他不会一次性加载所有数据,而是要你点击某个按钮,输入某个验证码后才会显示出数据。 => 无头浏览器(后台代替开启浏览器)比如:java的selenium和nodejs的puppeteer

数据抓取流程:

1.分析数据源(怎么获取)

2.拿到数据后,怎么处理?

3.写入数据库等存储

1.方式一:使用okhttp

        1.引入依赖

<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.1.0</version>
</dependency>

        2.构造请求

Okhttp3 完成页面请求,需要三大步骤:

  1. 实例化 OkHttpClient
  2. 执行调用。
    1. 在执行调用之前,需要实例化一个 Request 对象
    2. 然后构建调用对象 
    3. 最后执行调用,如果调用失败可能抛异常,所以必须抓取异常
  3. 调用对象的方法即可获取返回的字符串内容

get请求

public class Main {public static void main(String[] args) throws IOException {String url = "https://4399.com";OkHttpClient okHttpClient = new OkHttpClient();Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);String string = call.execute().body().string();System.out.println(string);}
}

 post请求

    public static final MediaType JSON_TYPE = MediaType.parse("application/json; charset=utf-8");/*** 向指定的 url 提交数据,以 json 的方式*/public String postContent(String url, Map<String, String> datas) {// okHttpClient 实例OkHttpClient okHttpClient = new OkHttpClient();// 数据对象转换成 json 格式字符串String param = JSON.toJSONString(datas);//post方式提交的数据RequestBody requestBody = RequestBody.create(JSON_TYPE, param);Request request = new Request.Builder().url(url).post(requestBody).build();// 使用client去请求Call call = okHttpClient.newCall(request);// 返回结果字符串String result = null;try {// 获得返回结果result = call.execute().body().string();} catch (IOException e) {// 抓取异常System.out.println("request " + url + " error . ");e.printStackTrace();}return result;}public static void main(String[] args) {String url = "https://4399.com";Map<String, String> datas = new HashMap();datas.put("num", "6666");Main poster = new Main();String content = poster.postContent(url, datas);System.out.println("API调用结果");System.out.println(content);}

2.方式二:使用Hutool

<!-- https://hutool.cn/docs/index.html#/-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.8</version>
</dependency>
public static void main(String[] args) throws IOException {String json = "{\n" +"  \"current\": 1,\n" +"  \"pageSize\": 8,\n" +"  \"sortField\": \"createTime\",\n" +"  \"sortOrder\": \"descend\",\n" +"  \"category\": \"文章\",\n" +"  \"tags\": [],\n" +"  \"reviewStatus\": 1\n" +"}";String url = "https://4399.com";String result2 = HttpRequest.post(url).body(json).execute().body();String uu = "F:\\user-center-backend\\src\\main\\java\\com\\yupi\\usercenter";File file = new File(uu, "result.json");file.createNewFile();FileWriter fileWriter = new FileWriter(file);fileWriter.write(result2);System.out.println(result2);
}

3.方式三:使用Jsoup

        1.引入依赖

<!--        jsoup--><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3</version></dependency>

        2.构造请求 

package org.example.cetidenet;import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.example.cetidenet.model.entity.Post;
import org.example.cetidenet.service.PostService;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;@SpringBootTest
class CetideNetApplicationTests {@Autowiredprivate PostService postService;void testFetchPic() throws IOException {int current = 1;String url = "https://4399.com";Document doc = Jsoup.connect(url).get();Elements elements = doc.select(".iuscp.isv");for(Element h : elements){//取图片地址(murl)String m = h.select(".iusc").get(0).attr("m");//取地址Map<String,Object> result = JSONUtil.toBean(m,Map.class);String murl = (String)result.get("murl");System.out.println(murl);String title =h.select(".inflnk").get(0).attr("aria-label");System.out.println(title);}}
}

相关文章:

获取数据源(多种方式爬虫介绍)

获取不同类型的数据源&#xff1a; 对于看上的网站如何获取其信息&#xff1a; 1.分析原网站是如何获取到这些数据的&#xff1f;哪个接口&#xff1f;哪些参数&#xff1f; 2.用程序去调用接口&#xff08;python/java都可以&#xff09; 3.处理一些数据&#xff0c;优化数…...

Linux下FTP服务器搭建配置:vsftpd的安装与配置实验

文章目录 vsftpd的安装与配置指南1. vsftpd的安装2. vsftpd配置详解3. 匿名访问测试4. 本地用户访问FTP的配置5. 修改匿名用户和本地用户的默认根目录6. 黑名单与白名单的使用7. 使用Windows文件资源管理器登录8. 拓展FTP的使用场景9. 注意事项 vsftpd的安装与配置指南 本文详…...

使用Java调用Apache commons-text求解字符串相似性实战

目录 前言 一、字符串距离的几种计算方法 1、Levenshtein 距离 2、Overlap Coefficient计算 3、Q-gram Matching 4、余弦相似性计算 二、基于余弦相似性的基地名称对比 1、加载百科中的基地信息列表 2、设置忽略词列表 3、将数据库地名和Excel进行对比 三、总结 前言…...

http request-01-XMLHttpRequest XHR 简单介绍

http 请求系列 http request-01-XMLHttpRequest XHR 简单介绍 http request-01-XMLHttpRequest XHR 标准 Ajax 详解-01-AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;入门介绍 Ajax XHR 的替代方案-fetch Ajax XHR 的替代方案-fetch 标准 Ajax 的替代方案…...

关于tresos Studio(EB)的MCAL配置之DIO

General Dio Development Error Detect开发者错误检测 Dio Flip Channel Api翻转通道电平接口Dio_FlipChannel是否启用 Dio Version Info Api决定Dio_GetVersionInfo接口是否启用&#xff0c;一般打开就行。 Dio Reverse Port Bits让端口的位&#xff08;通道&#xff09;进…...

【漫谈C语言和嵌入式003】1394总线

1394总线&#xff08;FireWire或IEEE 1394&#xff09;是一种高速串行总线标准&#xff0c;最初由苹果公司开发&#xff0c;并在1995年被IEEE&#xff08;电气与电子工程师协会&#xff09;批准为国际标准。它最初的目标是提供一种高性能、低延迟的数据传输方法&#xff0c;用于…...

python爬虫爬取某图书网页实例

文章目录 导入相应的库正确地设置代码的基础部分设置循环遍历遍历URL保存图片和文档全部代码即详细注释 下面是通过requests库来对ajax页面进行爬取的案例&#xff0c;与正常页面不同&#xff0c;这里我们获取url的方式也会不同&#xff0c;这里我们通过爬取一个简单的ajax小说…...

Linux 用户管理的基本概念、常用工具及操作流程

&#x1f600;前言 本篇博文是关于Linux 中用户管理的基本概念、常用工具及操作流程&#xff0c;并提供了一些实用的示例和注意事项。希望这些内容能帮助读者在日常工作中更加高效地管理 Linux 系统的用户账户&#xff0c;希望你能够喜欢&#x1f970; &#x1f3e0;个人主页&a…...

手撕C++入门基础

1.C介绍 C课程包括&#xff1a;C语法、STL、高阶数据结构 C参考文档&#xff1a;Reference - C Reference C 参考手册 - cppreference.com cppreference.com C兼容之前学习的C语言 2.C的第一个程序 打印hello world #define _CRT_SECURE_NO_WARNINGS 1 // test.cpp // …...

NPM版本控制策略:实现版本候选行为的指南

引言 在现代JavaScript项目中&#xff0c;依赖管理是确保应用稳定性和安全性的关键环节。NPM&#xff08;Node Package Manager&#xff09;作为Node.js的包管理器&#xff0c;提供了一套灵活的版本控制机制&#xff0c;允许开发者精确控制依赖包的版本。版本候选行为&#xf…...

问题集锦6

1.外调外围接口数据库没有变化 我已经修改完发到线上&#xff0c;看调用用代码释放更新了 or 自己掉测试环境试下 handledList 2.list每次写入最前面 List<Integer> snew ArrayList<>();s.add(1);s.add(2);s.add(0,0);System.out.println(s);3.集合 List<Inte…...

【研发日记】嵌入式处理器技能解锁(四)——TI C2000 DSP的Memory

文章目录 前言 背景介绍 Memory映射 RAM ROM 外设Register Memory分配 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见《…...

Ubuntu离线安装docker

查看操作系统版本&#xff1a; rootzyh-VMware-Virtual-Platform:~/install# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04 LTS Release: 24.04 Codename: noble rootzyh-VMware-Virtual-Platform:~/install#…...

【抓耳挠腮,还是升职加薪,一起来画架构图!】

1. 焦头烂额 最近又遇到个焦头烂额的事情 &#xff0c;老板有了新想法&#xff0c;业务有所转向&#xff0c;需要新的方案设计 &#xff0c;架构设计&#xff0c;以进行后续实施。很快&#xff0c;第一次汇报来了&#xff0c; 由于前期准备时间短&#xff0c;模块拆分不清晰&a…...

算法的学习笔记—合并两个排序的链表(牛客JZ25)

&#x1f600;前言 在算法面试中&#xff0c;链表问题是经常遇到的考点之一&#xff0c;其中合并两个排序链表是一个非常经典的问题。本文将详细介绍如何通过递归和迭代两种方式实现两个有序链表的合并。 &#x1f3e0;个人主页&#xff1a;尘觉主页 文章目录 &#x1f600;合并…...

《虚拟之旅:开启无限可能的机器世界》简介:

1.Ubonto的介绍&#xff1a; Ubuntu 是一个流行的开源操作系统&#xff0c;基于 Linux 内核。 它具有以下一些特点和优势&#xff1a; 开源免费&#xff1a;任何人都可以免费使用、修改和分发。丰富的软件库&#xff1a;通过软件包管理器可以方便地安装各种应用程序。良好的…...

centos7 服务器搭建

1. 查看 centos 版本 cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)2 .查看 ip地址 ip addr sudo yum install net-tools -y 3. 是否能够上网 ping www.baidu.com ping 114.114.114.114 sudo systemctl restart network 4. DNS 更新DNS配置 编辑/etc/r…...

【Godot4自学手册】第四十五节用着色器(shader)制作水中效果

本节内容&#xff0c;主要学习利用着色器制作水波纹效果&#xff0c;效果如下&#xff1a; 一、搭建新的场景 首先我们新建场景&#xff0c;根节点选择Node2D&#xff0c;命名为Water&#xff0c;给根节点添加两个Tilemap节点&#xff0c;一个命名为Background主要用于绘制地…...

VMware Workstation Pro 安装 Ubuntu Server

这里写目录标题 VMware Workstation Pro 安装 Ubuntu Server1. 启动选项2. 系统语言3. 安装程序升级4. 键盘配置5. 安装类型6. 网卡配置7. 代理配置8. 系统镜像配置9. 硬盘配置10. 账户配置11. Ubuntu Pro 版本12. SSH 服务13. 推荐软件14. 安装成功15. 第一次重启报错16. 登录…...

智能化包括自动化与非自动化

智能化通常指的是系统或设备具备智能功能&#xff0c;以提高其自主性和效率。智能化可以分为自动化与非自动化两大类&#xff0c;每一类都有其独特的特点和应用场景。 一、自动化 自动化指的是系统能够在无需人为干预的情况下完成任务或操作。自动化系统通常依赖于预设的规则、…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存&#xff0c;但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程&#xff0c;可以参考这篇文章&#xff0c;我觉得写的非常…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...