可能他们需要几个不同编程语言的示例,比如Python、JavaScript(Node.js)、Ruby之类的。然后我要考虑每个语言常用的库和框架,确保示例简单易懂,适合不同水平的开发者。
接下来,我需要分步骤来思考每个语言的实现方式。比如Python的话,requests和BeautifulSoup是常用的组合,或者用Scrapy框架。对于Node.js,可能会用axios和cheerio,或者puppeteer来处理动态加载的图片。Ruby方面,可能用Nokogiri和HTTParty。
以下是使用不同编程语言编写的图片爬虫示例,涵盖 Python、JavaScript (Node.js) 和 Ruby 三种常见语言,并附核心思路解释:
依赖库: 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}')
依赖库: 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();
依赖库: 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
<img>
标签。robots.txt
和版权声明。time.sleep(1)
)避免被封禁。selenium
或 Node.js 的 puppeteer
)。根据实际需求调整选择器和 URL 处理逻辑。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有