使用Python获取国际版淘宝AliExpress的商品信息

技巧库 · ipidea · 于 5个月前 发布 · 322 次阅读

AliExpress全球速卖通,又称国际版淘宝,是一款面向海外的购物网站。 之前有获取过Amazon的信息,偶然间发现了这个网站,所以今天看看这个国际版淘宝上面有没有我想要的东西。  不知道这上面能不能买到原价的XboxSerisX呢?

网站分析 为了找到上面有没有原价的Xbox,首先在首页,搜一下PS5 ,再查看一下请求: 嗯,很直白的get请求,所有的参数链接上都写得清清楚楚。下面尝试一下翻页。 点击下一页之后呢,Doc选项卡没有任何变化,那就再XHR选项卡找,果然找到了翻页的请求: 简化下链接,把一堆恼人的数字参数去掉之后,把链接拿出来单独请求: 完美的触发了验证滑块 。 那我不妨换个思路,直接请求地址栏的链接,不去请求他的api接口呢?结果是可以的,改变一下page参数就可以了:

1.url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'  

开始请求 一般的Get请求即可:

1.def get_res(word):  
2.    url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'  
3.    res = requests.get(url, headers=self.headers,timeout=10)  
4.    if res.status_code == 200:  
5.        content = res.content.decode('utf-8') 

从上面的content变量里,用re正则表达式获取其中的内容,转化成json字符串:

1.content = res.content.decode('utf-8')  
2.info = re.findall("window.runParams = (\{.*\})",content)[-1]  
3.info = info.replace('false','False').replace('true','True')  
4.datas = eval(info)['mods']['itemList']['content']  

如何从那么乱七八糟的东西快速找到我们想要的东西呢?json格式化啊!百度json格式化,复杂的json也能一层一层剥开他的心(要把单引号替换成双引号哦): 这样我们就能快速找到我们想要的内容了,我只要title和url就可以了,反正可以自定义,管他呢。

代理设置 刚才也看到了,滑块验证不知道什么时候就出现了。如果想顺利的获取想要的数据,高效稳定的代理肯定是少不了的。 我这里呢使用的是ipidea的代理,新用户可以白嫖流量,效果好不好不妨可以试试 地址:http://www.ipidea.net/ 本人亲测高并发下成功率可不低的哦。 本次使用的是ipidea的账密代理方式;

设置好帐号信息,将账密的链接当成代理信息传进去就可以了:

1.entry = '账密链接'  
2.proxy = {  
3.    'http': entry,  
4.    'https': entry,  
5.}  
6.url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'  
7.res = requests.get(url,headers=headers, proxies=proxy)  
8.if res.status_code == 200:  
9.    content = res.content.decode('utf-8')  

完整代码

1.import requests  
2.import re  
3.import multiprocessing as mp  
4.from loguru import logger  
5.   
6.class aliExpress():  
7.   
8.    def __init__(self):  
9.        self.manager = mp.Manager  
10.        self.headers = {  
11.                "authority":"www.aliexpress.com",  
12.                "accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",  
13.                "user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36",  
14.        }  
15.        #地址:http://www.ipidea.net/?utm-source=csdn&utm-keyword=?wb   
16.        entry = '账密链接'  
17.        self.proxy = {  
18.            'http': entry,  
19.            'https': entry,  
20.        }  
21.        self.resultList = self.manager().list()  
22.   
23.    def get_res(self,i,word):  
24.        logger.info(f"开始测试{word}")  
25.        url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page=1'  
26.        try:  
27.            res = requests.get(url,headers = self.headers,proxies = self.proxy)  
28.            if res.status_code == 200:  
29.                content = res.content.decode('utf-8')  
30.                info = re.findall("window.runParams = (\{.*\})",content)[-1]  
31.                info = info.replace('false','False').replace('true','True')  
32.                datas = eval(info)['mods']['itemList']['content']  
33.                for data in datas:  
34.                    print(data)  
35.                    exit()  
36.                    itemData = {}  
37.                    itemData['title'] = data['title']['displayTitle']  
38.                    itemId = data['productId']  
39.                    itemData['itemUrl'] = f'https://www.aliexpress.com/item/{itemId}.html'  
40.                    print(itemData)  
41.        except Exception as e:  
42.            print('error',e)  
43.   
44.    def start(self):  
45.        keywords = [关键词list]  
46.        for word in keywords:  
47.            self.get_res(1,word)  
48.   
49.if __name__ == '__main__':  
50.    aliExpress().start()

共收到 0 条回复
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册