4K 优先 + 滚动翻页:更精致的抓取
4K-First & Infinite Scroll: Polished Crawling
老板经常提图要高清。普通采集可能下到 800x600 的缩略图,这一节我们让脚本优先选 4K 大图。
1. 解析图片多种尺寸
import re
from urllib.parse import urlparse
def upgrade_to_original(url):
if '?' in url:
base, query = url.split('?', 1)
upgraded = re.sub(r'w=\d+', 'w=4000', query)
return f'{base}?{upgraded}'
return url
网站原图 URL 规律:每个站都有自己的图床规则,抓几次样本就能总结出来。最稳的方案是看浏览器 DevTools 的 Network 标签 — 原图请求的 URL 一定比缩略图更长/参数更复杂。
2. 滚动翻页 + 懒加载触发
from selenium import webdriver
import time
def scrape_infinite_scroll(url, target_count=100):
driver = create_stealth_driver()
driver.get(url)
collected = []
last_count = 0
scroll_attempt = 0
while len(collected) < target_count and scroll_attempt < 50:
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
time.sleep(2)
imgs = driver.find_elements('css selector', 'img[data-src], img[src]')
for img in imgs:
src = img.get_attribute('data-src') or img.get_attribute('src')
if src and src not in collected:
collected.append(upgrade_to_original(src))
if len(collected) == last_count:
scroll_attempt += 1
else:
scroll_attempt = 0
last_count = len(collected)
print(f'已收集 {len(collected)} 张')
driver.quit()
return collected[:target_count]
3. 完整工程化
image_urls = scrape_infinite_scroll(
'https://example.com/gallery?keyword=小米',
target_count=500
)
tasks = [(url, Path(f'downloads/{i:04d}.jpg')) for i, url in enumerate(image_urls)]
with ThreadPoolExecutor(max_workers=20) as executor:
list(executor.map(lambda t: download_with_retry(*t), tasks))
print(f'共下载 {len(image_urls)} 张 4K 图')
这套流水线能搞定 90% 图片采集需求。我们的图片爬虫软件把这套封装成 GUI — 输关键词、点开始,剩下的全自动。
想跳过写代码,直接批量下高清图?
配套软件内置多线程 + 4K 优先 + 关键词分类 + 滚动翻页,导入关键词即下,5000 张 1 键入库