当下最强免费爬虫工具! Scrapling保姆级实战教程
Scrapling应该是当下最强的爬虫工具了,关于它的特性和反爬能力这里就不赘述了,大家可以去项目主页了解一下。
Scrapling 提供了一套从单页请求到全站爬取、从普通站点到Cloudflare防护站点的较为完整的现代爬虫解决方案,尤其适合需要较高隐蔽性但对速度要求不是极致的场景。
实战1: 使用Stealthy Fecher来获取豆瓣电影的详情
第一个例子是使用Stealthy Fecher来获取豆瓣电影的详情。
豆瓣电影的详情页如果直接访问的话会有一次javascript的跳转,所以必须用打开浏览器的方式去爬,这也是Stealthy Fecher的使用场景。

Stealthy Fecher会用浏览器打开目标站点的地址,并且自动绕过一些通用的反爬限制。
具体代码如下,就是使用浏览器打开豆瓣电影的详情页,然后从页面上提取出具体的数据。
"""
示例目标:从豆瓣电影页面提取以下核心信息
- 电影中文名
- 上映年份
- 豆瓣评分
- IMDb id
- 前几条热门短评
使用的技术特点:
1. 使用 StealthyFetcher 而非普通 requests(带真实浏览器指纹)
2. 等待关键元素 #info 加载完成(豆瓣很多数据是 js 渲染的)
3. 使用 css 选择器 + 简单正则进行字段提取
4. 对可能为空的字段做了简单容错处理
"""
# 导入 StealthyFetcher 类,用于模拟真实浏览器行为来获取网页内容
# (相比普通 requests 更能绕过部分反爬机制)
from scrapling.fetchers import StealthyFetcher
# 目标网页:豆瓣电影的详情页面
url = 'https://movie.douban.com/subject/1296736'
# 使用 StealthyFetcher 进行网页获取(模拟真实浏览器访问)
page = StealthyFetcher.fetch(
url, # 要抓取的目标URL
google_search=False, # 对于国内的站点,不使用 Google 搜索跳转(直接访问)
real_chrome=True, # 尽量使用真实的 Chrome 浏览器指纹(更像真人)
wait_selector='#info' # 等待页面中 id="info" 的元素加载出来再返回(重要!)
# 防止过早返回导致关键信息还没加载
)
# 从 div#info 块中提取 IMDb id(通常是 tt 开头的8位数字)
# 写法:先选 #info → 取整个文本内容 → 清理 → 用正则匹配 tt 开头的数字
imdb = page.css('#info').get().clean().re_first(r'(tt\d{5,8})')
# 提取电影标题(h1 标签下面的 span 文本)
title = page.css('h1 span::text').get()
# 提取年份(h1 里带 class="year" 的 span,通常是 (1993) 这种格式)
# 再用正则只保留数字部分
year = page.css('h1 span.year::text').get().clean().re_first(r'(\d+)')
# 提取评分(class 为 rating_num 的元素文本,通常是 9.3 这种)
# 直接转为 float 类型
rating = float(page.css('.rating_num::text').get())
# 提取所有短评(class 为 short 的 span 标签的文本内容)
# getall() 返回列表
shorts = page.css('span.short::text').getall()
# 将年份字符串安全转为整数,如果不存在则为 None
year_int = int(year) if year else None
# ──────────────── 输出结果 ────────────────
print("提取到数据:")
print(title, year_int, rating, imdb)
print("短评前3条:", shorts[:3])
上面代码的核心是 page = StealthyFetcher.fetch( url, google_search=False, real_chrome=True, wait_selector='#info'),因为页面打开之后会有个自动的javascript跳转,所以我们要等待跳转结束并且页面上的元素加载成功之后才进行操作,这也就是wait_selector='#info的作用。









