抓取大众点评评论

本文分享抓取大众点评评论时遇到的字体反爬方法。需求是抓取目的商铺评论及信息,分析网站发现需登录获取cookie模拟登录,评论字体用图片代替,css文件存放字体位置信息。代码实现包括获取字的偏移量、行文字和真实文字。大众点评反爬严格,是检阅爬虫技能的好网站。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近抓取了大众点评的评论,其中遇到了相当有趣的用图片代替字体的反爬方法,给大家分享一下。

需求

抓取目的商铺的评论及相关信息

分析网站

  • 大众点评的评论信息需要登录后才能看到,登录获取其cookie,用以爬虫模拟登录
  • 分析其评论详情图片,发现里面的某字体不是正常的文字,而是通过图片代替字体,通过检查文字的css,发现相关的字体在http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/145a30db44df01339efea895999d3587.svg(不同的时间,地址会有所改变)
    评论详情图片
    代替字体的详情
    同时,通过研究页面的源代码,发现里面的某个css文件存放着给个字体的class对应的位置
    在这里插入图片描述
    在这里插入图片描述
    通过对这些的分析,能得到相应的字体文字。

代码实现

获取每个字代表的偏移量

def get_font_dict():
    """
    获取每个字代表的偏移量
    :return:
    """
    url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/c6763031f4ca5ef21c6b079409f076b9.css'
    url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/66ed5cd66492f2f67ccf37ae948a303c.css'
    r = requests.get(url, headers=headers)
    font_list = re.findall('.*?{.*?}', r.text)
    font_dict = {}
    for font in font_list:
        # print(font)
        class_font = font.split('{')[0].replace('.', '')
        pianyi_list = re.findall('\d+', font.split('{')[1])
        num_list = [int(x) for x in pianyi_list if int(x) != 0]
        if len(num_list) == 1:
            num_list.insert(0, 0)
        font_dict[class_font] = num_list
    # print(font_dict)
    return font_dict

获取每一行的文字

def get_font_place():
    """
    获取每一行对应的文字
    :return:
    """
    # url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/3617c635ce7e39c7e8fa09bb3a0ea481.svg'
    url = 'http://s3plus.meituan.net/v1/mss_0a06a471f9514fc79c981b5466f56b91/svgtextcss/145a30db44df01339efea895999d3587.svg'
    place_list = []
    id_dict = []
    r = requests.get(url, headers)
    # print(r.text)
    soup = BeautifulSoup(r.text, 'html.parser')
    # print(soup)
    text_list = soup.find_all('text')
    # text_list = soup.find_all('textpath')
    # id_list = soup.find_all('path')
    # print(len(text_list))
    for i in range(len(text_list)):
        # x = text_list[i]['textlength']
    #         # st = text_list[i].text
    #         # # print(id_list[i])
    #         # y = id_list[i]['d'].split()[1]
    #         # # print(y, st)
    #         # place_list.append({y: [x, st]})
        y = text_list[i]['y']
        text = text_list[i].text
        place_list.append({y:text})
    # print(place_list)
    return place_list

获取相应的位置对应的真实文字


def get_ture_font(place):
    """
    获取真实的评论字
    :param place: 
    :return:
    """

    num = 0
    for i in font_place:
        for k in i:
            if int(k) > place[1]:
                # print(i)
                num = 1
                st = i[k]
                # st = i[k][1]
                # leng = i[k][0]
        if num:
            break
    # st_num = int((int(leng) - place[0]) / 14)
    st_num = int(place[0]) / 14
    # print(st_num)
    # true_font = st[len(st) - st_num]
    true_font = st[int(st_num)]
    # print(true_font)
    return true_font

总结

大众点评的反爬比较严重,对ip、账号的实行限制,对字体也进行反爬,而且字体反爬的链接、规则也会变化,是个进行爬虫技能检阅的不错的网站。下面是详细的代码:详细代码地址

### 编写Python爬虫抓取大众点评网店铺数据 为了实现这一目标,可以从构建一个基于Scrapy框架的爬虫入手。此框架非常适合处理复杂的网页抓取任务,并能有效应对各种反爬机制[^2]。 #### 准备工作 确保安装了最新版的Python以及必要的开发工具链之后,在命令行界面执行如下操作: ```bash pip install Scrapy ``` 这一步骤会自动完成Scrapy库及其依赖项的部署。 #### 创建并配置Scrapy项目 通过运行`scrapy startproject dianping_spider`创建一个新的Scrapy工程;随后进入该目录下修改settings.py文件中的USER_AGENT设置模拟浏览器访问行为,从而降低被识别为自动化请求的风险。 #### 定义Item结构体 定义好要提取的数据字段,比如商店名称、地址、评分等信息。可以在items.py中添加相应的类定义: ```python import scrapy class DianpingspiderItem(scrapy.Item): shop_name = scrapy.Field() address = scrapy.Field() score = scrapy.Field() # 可继续增加其他所需属性... ``` #### 开发Spider逻辑 接下来就是核心部分——编写spiders下的py脚本,具体来说就是要指定起始URL列表(`start_urls`),解析页面内容的方法(parse),还有如何跟进链接获取更多页码等内容。 考虑到大众点评存在较为严格的防爬措施,建议采取一些额外手段提高成功率,例如调整下载延迟时间(DOWNLOAD_DELAY)、启用随机User-Agent池等功能特性来增强隐蔽性和稳定性[^1]。 此外,对于图片这类二进制大对象(BLOB),可以选择仅记录其在线路径而非实际下载至本地磁盘,以此减少I/O开销和存储压力[^3]。 最后提醒一点,务必遵守各站点的服务条款与法律法规,合理合法地开展数据采集活动。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值