Java爬取百度图片

本文介绍了如何使用Java成功爬取百度图片,解决了以往只能爬取一页的问题。通过引入特定的jar包,并详细讲解了相关代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前研究了好久怎样爬取百度图片,每次爬取百度的页数都是一页,数量并不多。
现在终于搞定了。

废话不多说,直接上代码。

这里分解利用了jsonjsoup的类。
jar包下载地址如下:
json下载地址
jsoup下载地址
在导入json的时候,需要把压缩包下所有的jar包都导入进去才行。

/**
 * Created by Aiden on 2015/12/9.
 */

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

// 爬取百度图片
public class doBaidu {
	public synchronized static void Geturl(String key, int max) { // key为关键词,max作为爬取的页数
		FileWriter fileWriter = null; // 写入文件
		try {
			fileWriter = new FileWriter(new File("img.txt")); // 写入文件
		} catch (IOException e) {
			e.printStackTrace();
		}
		String base = "http://image.baidu.com/search/avatarjson?tn=resultjsonavatarnew&ie=utf-8&word
### 爬取百度图片的解决方案及代码示例 使用 Java 和 Jsoup 庉库爬取百度图片需要理解网页结构和动态加载机制。以下是实现此功能的详细方法和代码示例。 #### 1. 确定目标网页 百度图片搜索页面是通过 AJAX 动态加载的,因此直接解析 HTML 可能无法获取到完整的图片信息。通常需要结合工具如 PhantomJS 或 Selenium 模拟浏览器行为[^1]。然而,对于简单的静态内容,Jsoup 仍然可以处理。 #### 2. 获取网页内容 使用 Jsoup 的 `connect(String url)` 方法连接目标 URL,并通过 `get()` 方法获取网页内容。需要注意的是,如果目标页面包含动态加载的内容,可能需要额外的工具来模拟浏览器行为[^2]。 ```java import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; public class BaiduImageCrawler { public static void main(String[] args) { String baiduImageUrl = "https://image.baidu.com/search/index?tn=baiduimage&word=关键词"; try { // 连接并获取网页内容 Document document = Jsoup.connect(baiduImageUrl).userAgent("Mozilla/5.0").get(); // 解析图片元素 Elements imgElements = document.select("img"); // 输出图片链接 for (Element img : imgElements) { String imageUrl = img.attr("data-src"); // 注意:百度图片可能使用 data-src 属性存储实际链接 if (!imageUrl.isEmpty()) { System.out.println(imageUrl); } } } catch (Exception e) { e.printStackTrace(); } } } ``` #### 3. 处理动态加载内容 如果百度图片的某些部分是通过 AJAX 动态加载的,则需要使用其他工具(如 Selenium 或 PhantomJS)来模拟浏览器行为。以下是一个结合 Selenium 的简单示例: ```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; public class BaiduImageDynamicCrawler { public static void main(String[] args) { // 设置 ChromeDriver 路径 System.setProperty("webdriver.chrome.driver", "path/to/chromedriver"); // 初始化 WebDriver WebDriver driver = new ChromeDriver(); String baiduImageUrl = "https://image.baidu.com/search/index?tn=baiduimage&word=关键词"; try { // 打开目标页面 driver.get(baiduImageUrl); // 获取页面源码 String pageSource = driver.getPageSource(); Document document = Jsoup.parse(pageSource); // 解析图片元素 Elements imgElements = document.select("img"); for (Element img : imgElements) { String imageUrl = img.attr("data-src"); if (!imageUrl.isEmpty()) { System.out.println(imageUrl); } } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭浏览器 driver.quit(); } } } ``` #### 4. 存储图片数据 如果需要将图片链接保存到数据库中,可以参考 MySQL 数据库的存储方式[^3]。以下是一个简单的存储示例: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class ImageStorage { public static void saveImageToDatabase(String imageUrl) { String jdbcUrl = "jdbc:mysql://localhost:3306/your_database"; String username = "root"; String password = "password"; try (Connection connection = DriverManager.getConnection(jdbcUrl, username, password)) { String sql = "INSERT INTO images (url) VALUES (?)"; try (PreparedStatement statement = connection.prepareStatement(sql)) { statement.setString(1, imageUrl); statement.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } } } ``` #### 注意事项 - 百度图片页面可能会频繁更新其 HTML 结构,因此需要定期检查选择器是否仍然有效。 - 遵守目标网站的 robots.txt 文件和相关法律条款,避免违反爬虫协议。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值