当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-10-14
AliExpress全球速卖通,又称国际版淘宝,是一款面向海外的购物网站。 之前有获取过Amazon的信息,偶然间发现了这个网站,所以今天看看这个国际版淘宝上面有没有我想要的东西。 不知

AliExpress全球速卖通,又称国际版淘宝,是一款面向海外的购物网站。

之前有获取过Amazon的信息,偶然间发现了这个网站,所以今天看看这个国际版淘宝上面有没有我想要的东西。

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

 不知道这上面能不能买到原价的XboxSerisX呢?


网站分析

为了找到上面有没有原价的Xbox,首先在首页,搜一下PS5 ,再查看一下请求:

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

嗯,很直白的get请求,所有的参数链接上都写得清清楚楚。下面尝试一下翻页。

点击下一页之后呢,Doc选项卡没有任何变化,那就再XHR选项卡找,果然找到了翻页的请求:

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

简化下链接,把一堆恼人的数字参数去掉之后,把链接拿出来单独请求:

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

完美的触发了验证滑块 。

那我不妨换个思路,直接请求地址栏的链接,不去请求他的api接口呢?结果是可以的,改变一下page参数就可以了:

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')

查看返回值,他的内容是js加载的:

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

从上面的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(232, 232, 232); background: rgb(249, 249, 249);">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(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()
上一篇:PHP和Python如何选择?哪个更有发展前途?
下一篇:没有了
网友评论