【问题标题】:How else can I access a marketplace's product information via code?我还能如何通过代码访问市场的产品信息?
【发布时间】:2021-08-31 03:31:32
【问题描述】:

为了从 Ali Express 上抓取产品,我可以在 Chrome 的控制台中运行 window.runParams.data 以非常轻松地访问所有信息。知道了这一点,我使用正则表达式直接从 Ali Express 的 HTML 中抓取产品信息,而无需模拟一百万次点击以使信息出现在我的屏幕上然后才提取它。

我正在尝试为另一个名为 Mercado Livre 的网站做同样的事情。问题是,每个产品都可以有变体,每个变体可能有也可能没有另一组通常超过 10 张图像。这是很多图像,不幸的是,我无法像访问 AliExpress 那样访问 window.runParams.data。这是我尝试时遇到的错误:

VM228:1 Uncaught TypeError: Cannot read property 'data' of undefined
    at <anonymous>:1:18

这可能无关紧要,但变化部分出现在按钮中:

https://produto.mercadolivre.com.br/MLB-1870995603-brinquedos-sensoriais-popit-bubble-fidget-52-pecas-_JM

下拉菜单

https://produto.mercadolivre.com.br/MLB-1862560460-kit-brinquedos-sensoriais-fidget-push-pop-it-49-pcs-_JM

在无需模拟点击的情况下,使用 Python 抓取所有这些图像的 URL 的最简单方法是什么?我查看了代码,但我很困惑,因为许多图像在变体之间共享,因此使用 Ctrl + F 查找 URL 并尝试找到每个变体的位置是不可能的。

所有缩略图 (for example this one) 就足够了,因为我可以将 URL 末尾的 R 替换为 F 并且它会变大,like this

非常感谢!

【问题讨论】:

    标签: javascript python html web-scraping


    【解决方案1】:

    您可以使用requestsbeautifulsoup 来做到这一点。

    点击产品的变体后,数据将从 API 加载。您可以从该 API 获取所有信息。

    prod_var_id 是变体 ID。

    https://produto.mercadolivre.com.br/p/api/items?attributes={prod_var_id}&quantity=1&platform=ML&id=MLB1870995603&app=vip
    

    这里我已经抓取了产品变体的链接,从链接中提取了prod_var_id,并通过替换上述API URL 中的prod_var_id 来向API 发出get 请求。

    prod_var_id 出现在 URL 中 attributes= 之后

    from bs4 import BeautifulSoup
    import requests
    
    headers = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"}
    url = 'https://produto.mercadolivre.com.br/MLB-1870995603-brinquedos-sensoriais-popit-bubble-fidget-52-pecas-_JM'
    
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'lxml')
    a = soup.find_all('a', class_='ui-pdp-thumbnail ui-pdp-variations--thumbnail ui-pdp-thumbnail--NONE')
    
    prod_var_id = a[0]['href'].split('attributes=')[-1]
    api_url = f'https://produto.mercadolivre.com.br/p/api/items?attributes={prod_var_id}&quantity=1&platform=ML&id=MLB1870995603&app=vip'
    resp = requests.get(api_url).json()
    
    print(api_url)
    
    https://produto.mercadolivre.com.br/p/api/items?attributes=COLOR_SECONDARY_COLOR:NTJwY3MtMDE=&quantity=1&platform=ML&id=MLB1870995603&app=vip
    

    您可以向此 API 发出请求并提取您需要的任何数据。

    【讨论】:

    • 非常感谢您的回复!问题是没有使用您的方法提取任何变体图像。每个产品都有变体,您可以通过单击右侧的菜单访问这些变体。每个变体都有自己的多个图像,并且有两种类型的菜单可以访问这些变体(我已经链接到每个示例)。如何在不模拟点击的情况下通过代码访问它们?
    • 好的。当您单击任何这些变体时,请求将被发送到 API。您可以将请求发送到该 API 并从中获取您需要的数据。请参阅我的更新答案。
    • 太棒了,非常感谢!!有用!!但是,不幸的是,它不适用于具有下拉菜单而不是按钮来选择变体的产品,例如第二个链接。我试图用其他一些类名替换“ui-pdp-thumbnail ui-pdp-variations--thumbnail ui-pdp-thumbnail--NONE”,但它没有用。在您已经帮了我这么多之后,我真的很抱歉给您带来麻烦,但是您能帮我使它也适用于下拉菜单吗?再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多