Python爬虫实战:2026年还能用哪些方案
单纯靠轮换 User-Agent 和加个
下一篇
刷LeetCode最忌讳的就是“看答案-觉得自己懂了-换道题又卡住” →
time.sleep() 就能过反爬的时代早就过去了。现在的网站会通过 TLS 指纹、浏览器指纹甚至鼠标轨迹来识别机器人,如果还用几年前的那套逻辑写爬虫,IP 封禁速度会快得让你怀疑人生。在公司带团队做数据抓取时,我总结了一套根据场景选工具的逻辑,不能因为习惯就全用 Playwright 或 Selenium,那样太浪费资源。
一、静态页面:httpx + selectolax
对于服务端渲染的页面,我直接用 httpx 配合 selectolax。前者原生支持 HTTP/2 和异步,后者是基于 C 语言的 HTML 解析器,处理大页面比 BeautifulSoup 快得多。
import httpx
from selectolax.parser import HTMLParser
def scrape_static(url):
resp = httpx.get(url, headers={"User-Agent": "Mozilla/5.0"})
tree = HTMLParser(resp.text)
for node in tree.css(".listing"):
print(node.text())二、动态渲染:Playwright
必须运行 JS 的页面,目前 Playwright 完胜 Selenium。启动速度快,异步支持更优雅,而且 auto-waiting 机制能减少很多因为元素没加载出来而导致的报错。
from playwright.sync_api import sync_playwright
def scrape_with_playwright(url):
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto(url, wait_until="networkidle")
results = [
item.query_selector("h2").text_content()
for item in page.query_selector_all(".job-item")
]
browser.close()
return results三、最高效路径:直接找 API
这是最关键的技巧。在写任何爬虫代码前,先开 F12 盯着 Network 面板看,很多前端页面其实是在请求一个 JSON 接口。直接请求 API 速度最快且最稳定。
import httpx
url = "https://www.freelancer.com/api/projects/0.1/projects/active/?query=python"
data = httpx.get(url).json()关于过检测,面对 DataDome 这类硬核反爬,住宅代理(Residential Proxies)比数据中心 IP 重要得多。另外,建议实现一套自适应频率控制,而不是死板的固定间隔。
import time
class AdaptiveLimiter:
def __init__(self, min_delay=1.0, max_delay=5.0):
self.min_delay = min_delay
self.max_delay = max_delay
self.current_delay = min_delay
def wait(self):
time.sleep(self.current_delay)
def on_success(self):
self.current_delay = max(self.min_delay, self.current_delay * 0.9)
def on_block(self):
self.current_delay = min(self.max_delay, self.current_delay * 1.5)