为了从阿里速卖通中抓取产品,我可以运行window.runParams.data在Chrome的控制台访问所有的信息非常容易。知道了这一点,我使用regex直接从阿里速卖通的HTML中抓取产品信息,而不必模拟一百万次点击,使信息出现在我的屏幕上,然后才提取它。
我正试图为另一个名为Mercado Livre的网站做同样的事情. 问题是,每个产品都可能有变化,每个产品可能有也可能没有另一套通常超过10张的图像。有很多图像,不幸的是,我无法访问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 -泡沫烦躁不安- 52 - pecas _jm
或下拉:
https://produto.mercadolivre.com.br/mlb - 1862560460 - kit brinquedos sensoriais坐立不安——推动流行——它- 49 - pc - _jm
使用Python刮取所有这些图像的url而无需模拟点击的最简单方法是什么?我看了代码,但我感到非常困惑,因为许多图像是在变体之间共享的,所以使用Ctrl + F查找url并试图找到每个变体的位置是不可能的。
所有的缩略图(例如这个)就足够了,因为我可以把URL末尾的R替换为F,然后它就变大了,像这样。
非常感谢!
您可以使用requests
和beautifulsoup
。
单击产品的一个变体后,将从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
出现在attributes=
之后的URL
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发出请求并提取你需要的任何数据。