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

多语言编写的图片爬虫教程

可能他们需要几个不同编程语言的示例,比如Python、JavaScript(Node.js)、Ruby之类的。然后我要考虑每个语言常用的库和框架,确保示例简单易懂,适合不同水平的开发者。

接下来,我需要分步骤来思考每个语言的实现方式。比如Python的话,requests和BeautifulSoup是常用的组合,或者用Scrapy框架。对于Node.js,可能会用axios和cheerio,或者puppeteer来处理动态加载的图片。Ruby方面,可能用Nokogiri和HTTParty。

在这里插入图片描述

以下是使用不同编程语言编写的图片爬虫示例,涵盖 PythonJavaScript (Node.js)Ruby 三种常见语言,并附核心思路解释:

1. Python 版本 (推荐)

依赖库: requests, BeautifulSoup, os

import os
import requests
from bs4 import BeautifulSoup

# 目标网页 URL
url = 'https://example.com/images'

# 创建保存图片的目录
os.makedirs('images_py', exist_ok=True)

# 发送 HTTP 请求
response = requests.get(url)
response.raise_for_status()  # 检查请求是否成功

# 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')

# 提取所有图片链接(根据实际网页结构调整选择器)
img_tags = soup.select('img')  # 或 soup.find_all('img', {'class': 'thumbnail'})

# 下载并保存图片
for img in img_tags:
    img_url = img.get('src')
    if not img_url.startswith('http'):
        img_url = f'https://example.com{img_url}'  # 补全相对路径
    img_data = requests.get(img_url).content
    filename = os.path.join('images_py', os.path.basename(img_url))
    with open(filename, 'wb') as f:
        f.write(img_data)
    print(f'下载完成: {filename}')

2. JavaScript (Node.js) 版本

依赖库: axios, cheerio, fs, path

const axios = require('axios');
const cheerio = require('cheerio');
const fs = require('fs');
const path = require('path');
const { promisify } = require('util');
const writeFile = promisify(fs.writeFile);

async function downloadImages() {
  const url = 'https://example.com/images';
  const dir = 'images_js';

  // 创建目录
  if (!fs.existsSync(dir)) fs.mkdirSync(dir);

  // 获取网页内容
  const response = await axios.get(url);
  const $ = cheerio.load(response.data);

  // 遍历图片标签
  $('img').each(async (i, img) => {
    let imgUrl = $(img).attr('src');
    if (!imgUrl.startsWith('http')) {
      imgUrl = new URL(imgUrl, url).href; // 处理相对路径
    }

    // 下载图片
    try {
      const imageResponse = await axios.get(imgUrl, { responseType: 'arraybuffer' });
      const filename = path.join(dir, path.basename(imgUrl));
      await writeFile(filename, imageResponse.data);
      console.log(`下载完成: ${filename}`);
    } catch (err) {
      console.error(`下载失败: ${imgUrl}`, err.message);
    }
  });
}

downloadImages();

3. Ruby 版本

依赖库: nokogiri, httparty, fileutils

require 'nokogiri'
require 'httparty'
require 'fileutils'

url = 'https://example.com/images'
dir = 'images_rb'

# 创建保存目录
FileUtils.mkdir_p(dir)

# 获取网页内容
response = HTTParty.get(url)
doc = Nokogiri::HTML(response.body)

# 提取图片链接
doc.css('img').each do |img|
  img_url = img['src']
  next unless img_url

  # 处理相对路径
  img_url = URI.join(url, img_url).to_s unless img_url.start_with?('http')

  # 下载图片
  begin
    image_data = HTTParty.get(img_url, { headers: { 'User-Agent' => 'Mozilla/5.0' } }).body
    filename = File.join(dir, File.basename(img_url))
    File.open(filename, 'wb') { |f| f.write(image_data) }
    puts "下载完成: #{filename}"
  rescue => e
    puts "下载失败: #{img_url} - #{e.message}"
  end
end

关键步骤解释

  1. 发送 HTTP 请求: 使用各语言的 HTTP 客户端库获取网页内容。
  2. 解析 HTML: 利用解析库(如 BeautifulSoup、Cheerio、Nokogiri)定位 <img> 标签。
  3. 处理图片路径: 确保相对路径转换为绝对 URL。
  4. 下载图片: 再次发送请求获取图片二进制数据。
  5. 保存文件: 将二进制数据写入本地文件。

注意事项

  1. 遵守规则: 检查目标网站的 robots.txt 和版权声明。
  2. 限速策略: 添加延迟(如 time.sleep(1))避免被封禁。
  3. 错误处理: 增加重试机制和异常捕获。
  4. 动态页面: 若页面通过 JavaScript 加载,需使用无头浏览器(如 Python 的 selenium 或 Node.js 的 puppeteer)。

根据实际需求调整选择器和 URL 处理逻辑。

相关文章:

  • Jmeter接口性能测试方案
  • (一)机器人仿真平台pybullet基础学习(操作记录)
  • yolov11设置n、m、s、l、x对应的模型大小
  • 服务器风扇故障导致过热问题的解决方案
  • 力扣面试150题—旋转图像和矩阵置零
  • Alembic 和 fbx存储结构和存储动画对比
  • 48、Spring Boot 详细讲义(五)
  • 最新扣子实战教程,利用扣子平台通过在线表格记录,批量生图,再也不要一条条的粘贴提示词了
  • 如何查看网页或任意文档中的颜色数值
  • 如何用DeepSeek大模型提升MySQL DBA工作效率?实战案例解析
  • 英飞凌TLE9891 +TLE5501 有感油泵FOC控制方案
  • truss开源程序在生产中提供 AI/ML 模型的最简单方法
  • v837s-ov5640摄像头调试
  • 泊松分布详解:从理论基础到实际应用的全面剖析
  • Enovia许可释放
  • 3.vtkProp 和vtkProp3D
  • 三维物体消隐处理
  • numpy.ma.masked_where:屏蔽满足条件的数组
  • 企业数字化转型深度解析:政策驱动、核心要素、技术路径、实战策略与未来趋势
  • Sql Server(自用查看版)
  • 纪念沈渭滨︱在恩师沈渭滨老师指导下走上学术研究之路
  • 广西柳州23年的蝶变:从“酸雨之城”到“文明之城”
  • 碎片化时代如何阅读?巴金图书馆推出世界读书日系列活动
  • 杨国荣丨阐释学的内涵与意义——张江《阐释学五辨》序
  • 瑞安房地产王颖:房地产市场看到很好的信号,上海项目销售压力不大
  • 吉林省文联党组书记、主席赵明接受纪律审查和监察调查