稳铁蛋 2025-06-11 08:53 采纳率: 0%
浏览 7

外卖平台商家数据抓取

公司是代运营公司,需求是抓取外卖商家后端数据(单量,进店人数),有商家的账号密码,但是登录需要滑动验证跟短信验证。
目前使用的方法是保持登录状态,代码中携带cookie访问后端接口查询。
尝试过在服务器上搭建一个novnc 运行chrome 但是内存占用太高
也尝试过使用使用RPA 觉得店铺有点多都是用短信转发工具不太现实(短信是店铺老板的手机接收)
指导一下有什么方案能实现店铺大概100多家
有没有人工一次登录后可以实现短期不会失效的方法或者低占用的多开浏览器的方法

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-06-11 08:53
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    外卖平台商家数据抓取

    你公司需要抓取外卖商家后端数据,包括单量和进店人数,但是登录需要滑动验证和短信验证。目前你使用的是保持登录状态,携带cookie访问后端接口查询。

    考虑到滑动验证和短信验证的存在,保持登录状态的方法可能不太可靠。一个更好的解决方案是使用 Selenium 或 Scrapy 等爬虫工具模拟浏览器行为,实现自动登录和数据抓取。

    具体来说,你可以使用 Selenium 或 Scrapy 的 Python 库,模拟浏览器行为,输入账号密码,滑动验证和短信验证,然后获取后端接口的数据。

    以下是一个使用 Selenium 的示例代码:

    from selenium import webdriver
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    # 设置浏览器驱动
    driver = webdriver.Chrome()
    
    # 访问登录页面
    driver.get("https://example.com/login")
    
    # 输入账号密码
    driver.find_element_by_name("username").send_keys("username")
    driver.find_element_by_name("password").send_keys("password")
    
    # 点击登录按钮
    driver.find_element_by_name("login").click()
    
    # 等待滑动验证
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "slider")))
    
    # 滑动验证
    slider = driver.find_element_by_id("slider")
    slider.send_keys("123456")
    
    # 等待短信验证
    WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "sms_code")))
    
    # 输入短信验证码
    driver.find_element_by_id("sms_code").send_keys("123456")
    
    # 获取后端接口的数据
    response = driver.get("https://example.com/api/data")
    
    # 解析数据
    data = json.loads(response.text)
    
    # 保存数据
    with open("data.json", "w") as f:
        json.dump(data, f)
    
    # 关闭浏览器
    driver.quit()
    

    这个示例代码只是一个简单的示例,实际情况中可能需要根据具体的登录页面和后端接口进行修改。

    另外,如果你需要抓取大量数据,可以考虑使用 Scrapy 的分布式爬虫框架,实现更高效的数据抓取。

    评论

报告相同问题?

问题事件

  • 创建了问题 6月11日