Python中大众点评网站反爬机制又升级了,如何应对?

EGyfJJ.md.png

现在变成这样的了,以前 class 还有特定的标识。虽然麻烦点,但是还是可以通过 css 跟 svg 还原数据,这种就完全没有思路了,有大佬能给个思路吗

示例页面:

http://www.dianping.com/shop/2061139/review_all/p1


Python中大众点评网站反爬机制又升级了,如何应对?

10 回复

我看到的怎么和你看到的不一样?
https://i.loli.net/2019/04/30/5cc8504f24617.png


大众点评的反爬确实越来越严,主要难点在几个地方:

  1. 动态Cookie_lxsdk_s_lxsdk这类Cookie是服务端生成的,直接请求拿不到数据。
  2. 请求签名_token参数是前端用JS生成的,每次请求都会变。
  3. 风控检测:频繁请求会触发验证码或直接封IP。

要解决的话,核心思路是模拟浏览器执行环境,让服务端认为你是真实用户。

方案一:用Selenium/Playwright模拟真人操作
适合数据量不大的情况,直接控制浏览器打开页面,等数据加载完再解析。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.dianping.com/shop/xxxx")
time.sleep(3)  # 等页面加载
html = driver.page_source
# 再用BeautifulSoup或正则解析html
driver.quit()

缺点就是慢,但能绕过大部分前端加密。

方案二:逆向JS生成签名
如果你需要高效爬取,得把生成_token的JS逻辑抠出来,用Python重写或者用execjs调用。

import execjs

with open('dianping_encrypt.js', 'r', encoding='utf-8') as f:
    js_code = f.read()
ctx = execjs.compile(js_code)
token = ctx.call('getToken', '参数')

这需要花时间逆向,但一旦搞定效率就很高。

方案三:直接找数据接口
有些数据其实有隐藏的接口,比如通过抓包工具(Charles/Fiddler)找*.dianping.com的API请求,看能不能直接调用。但这类接口往往也有签名校验。

总结建议:小规模爬取用方案一,大规模就得硬刚JS逆向。

为什么不无头浏览器加 OCR

不同页面有不同的加密类型,他是 woff 跟 svg 混合加密,以前好像只有 svg 加密

OCR 好评!

学到一个反爬技术+1,备忘:





不过我这看到的这个好像不用 ocr,破解起来也算是易如反掌,坐标啥的都有,就差定位实际文字的代码了。。。

http://www.dianping.com/shop/2061139/review_all/p1http://www.dianping.com/shop/2061139 的评论是两种不同的加密方式,svg 的早就搞定了。

看起来很像自定义 CSS,不过没尝试过,改天研究研究( https://github.com/Northxw/Dianping, 这是我一周前搞得,只不过我没爬评论)

就是定义了一下字体而已,SVG 加密大众已经弃用了,你看到的方框是一个 Unicode 字符,Unicode 的编号和字体文件相对应,只不过字体文件并不是固定的,是渲染出来的,会有几个坐标的差异

总共就加密了六百多个字

回到顶部