
影刀RPA Python Requests库数据抓取进阶绕过浏览器直接拿数据作者林焱用影刀采集网页数据常规做法是打开浏览器→等待加载→捕获元素→提取数据。这条路在90%的情况下走得通但遇到以下场景就麻烦了页面加载慢、数据藏在接口返回的JSON里、需要批量请求几百个URL、目标网站有反爬机制封浏览器。这时候就该Python的requests库登场了——不走浏览器、直接发HTTP请求拿数据。速度快10倍不止还不容易被封。什么情况用requests1. 数据来自后端API接口很多网站的列表数据不是直接写在HTML里的而是通过API接口返回JSON。打开浏览器开发者工具F12切换到Network标签刷新页面你会看到一堆XHR/Fetch请求——那些返回JSON的接口就是目标。影刀可以提取HTML里的内容但提取API返回的JSON就麻烦了得先让浏览器发请求再截获响应。requests直接模拟请求一步到位。2. 需要批量请求大量URL影刀打开一个网页平均耗时2-4秒浏览器渲染等待加载。用requests发一个请求耗时0.1-0.5秒。如果你想采集1000个商品详情页影刀可能要跑一个多小时requests十几分钟搞定。3. 目标网站反爬严格有些网站检测到自动化浏览器不管是影刀还是Selenium直接弹验证码或封IP。requests伪装成一个普通的HTTP客户端不加载JS、不渲染CSS、不触发反爬脚本反而更安全。拼多多店群自动化报活动上架实战用requests替代影刀批量抓取以抓取某个电商平台的商品列表为例。先F12找到商品列表的API接口。假设接口是这样的GET https://api.example.com/goods/list?page1pageSize20返回到JSON长这样{code:200,data:{list:[{id:1,name:商品A,price:99.00},{id:2,name:商品B,price:199.00}],total:200}}影刀的Python代码块里这样写importrequests all_data[]forpageinrange(1,11):# 翻10页urlfhttps://api.example.com/goods/list?page{page}pageSize20headers{User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36,Referer:https://www.example.com/}resprequests.get(url,headersheaders,timeout10)dataresp.json()itemsdata[data][list]all_data.extend(items)# 回到影刀框架all_data是一组字典可以写入Excel注意几个细节headers里的User-Agent和Referer必须加否则很多接口直接拒绝timeout必须设否则碰到卡住的接口整个流程就僵住了用resp.json()前先检查resp.status_code不是200要处理异常处理Cookie和登录态很多API接口需要登录后才能访问。在影刀里登录后把Cookie复制给requests# 在影刀浏览器里登录后用这个指令获取Cookie# 然后传给requestscookies{session_id:abc123,token:xyz789}resprequests.get(url,headersheaders,cookiescookies)或者更简洁如果你用Selenium登录了直接用driver.get_cookies()拿到所有Cookie转成requests的格式。踩坑实录坑1接口返回的不是JSON有些老系统的接口返回的是JSONP外面包了一层函数调用callback({code:200,data:{...}})resp.json()会直接报错。你需要手动切掉外层importre textresp.text json_strre.search(r\((.*)\),text,re.S).group(1)datajson.loads(json_str)坑2编码问题Windows环境默认编码是GBK很多接口返回UTF-8。如果出现乱码显式指定resp.encodingutf-8坑3请求太快被封IPTEMU店群矩阵自动化运营核价报活动requests太快了一秒发几十个请求很容易触发反爬。必须加延时importtime time.sleep(0.5)# 每个请求之间等半秒更好的做法是用random随机延时importrandom time.sleep(random.uniform(0.3,1.0))坑4SSL证书问题有些内网系统或老服务器SSL证书过期requests会报错。加上verifyFalse跳过但会有一个警告再加一行关掉警告importurllib3 urllib3.disable_warnings()resprequests.get(url,verifyFalse)requests和影刀怎么配合最合理我的经验requests负责批量快速获取影刀负责流程调度和结果处理。流程骨架是影刀定时触发 → Python代码块用requests拉数据 → 回到影刀框架解析数据 → 写入Excel → 发邮件通知。requests拿到的数据可以直接存到影刀的变量里字符串、列表、字典都支持无缝衔接。写在最后requests不是用来取代影刀的浏览器功能的——表单交互、点击操作、拖拽这些还得靠影刀。但一旦你发现数据是从API来的直接上requests速度快10倍代码量少一半还更稳定。少渲染一个浏览器窗口就少一个出错的可能。