【Python爬取分享|使用Python获取国际版淘宝AliExpress的商品信息】AliExpress全球速卖通,又称国际版淘宝,是一款面向海外的购物网站。
之前有获取过Amazon的信息,偶然间发现了这个网站,所以今天看看这个国际版淘宝上面有没有我想要的东西。
文章图片
不知道这上面能不能买到原价的XboxSerisX
网站分析 为了找到上面有没有原价的Xbox,首先在首页,搜一下PS5 ,再查看一下请求:
文章图片
嗯,很直白的get请求,所有的参数链接上都写得清清楚楚。下面尝试一下翻页。
点击下一页之后呢,Doc选项卡没有任何变化,那就再XHR选项卡找,果然找到了翻页的请求:
文章图片
说实话看到那么长的链接,心里有一种想法:这网站会不会翻车?
简化下链接,把一堆恼人的数字参数去掉之后,把链接拿出来单独请求:
文章图片
寄
完美的触发了验证滑块 。
那我不妨换个思路,直接请求地址栏的链接,不去请求他的api接口呢?结果是可以的,改变一下page参数就可以了:
url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'
开始请求 一般的Get请求即可:
def get_res(word):
url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'
res = requests.get(url, headers=self.headers,timeout=10)
if res.status_code == 200:
content = res.content.decode('utf-8')
查看返回值,他的内容是js加载的:

文章图片
从上面的content变量里,用re正则表达式获取其中的内容,转化成json字符串:
content = res.content.decode('utf-8')
info = re.findall("window.runParams = (\{.*\})",content)[-1]
info = info.replace('false','False').replace('true','True')
datas = eval(info)['mods']['itemList']['content']

文章图片
眼花了吗?你跺你也麻
如何从那么乱七八糟的东西快速找到我们想要的东西呢?json格式化啊!百度json格式化,复杂的json也能一层一层剥开他的心(要把单引号替换成双引号哦):

文章图片
这样我们就能快速找到我们想要的内容了,我只要title和url就可以了,反正可以自定义,管他呢。

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

文章图片

文章图片

文章图片
设置好帐号信息,将账密的链接当成代理信息传进去就可以了:
entry = '账密链接'
proxy = {
'http': entry,
'https': entry,
}
url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page={page}'
res = requests.get(url,headers=headers, proxies=proxy)
if res.status_code == 200:
content = res.content.decode('utf-8')
这样代理或配置完成
完整代码
import requests
import re
import multiprocessing as mp
from loguru import loggerclass aliExpress():def __init__(self):
self.manager = mp.Manager
self.headers = {
"authority":"www.aliexpress.com",
"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",
"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",
}
#地址:http://www.ipidea.net/?utm-source=csdn&utm-keyword=?wb
entry = '账密链接'
self.proxy = {
'http': entry,
'https': entry,
}
self.resultList = self.manager().list()def get_res(self,i,word):
logger.info(f"开始测试{word}")
url = f'https://www.aliexpress.com/wholesale?trafficChannel=main&d=y&CatId=0&SearchText={word}<ype=wholesale&SortType=default&page=1'
try:
res = requests.get(url,headers = self.headers,proxies = self.proxy)
if res.status_code == 200:
content = res.content.decode('utf-8')
info = re.findall("window.runParams = (\{.*\})",content)[-1]
info = info.replace('false','False').replace('true','True')
datas = eval(info)['mods']['itemList']['content']
for data in datas:
print(data)
exit()
itemData = https://www.it610.com/article/{}
itemData['title'] = data['title']['displayTitle']
itemId = data['productId']
itemData['itemUrl'] = f'https://www.aliexpress.com/item/{itemId}.html'
print(itemData)
except Exception as e:
print('error',e)def start(self):
keywords = [关键词list]
for word in keywords:
self.get_res(1,word)if __name__ == '__main__':
aliExpress().start()
推荐阅读
- python|IPIDEA的使用方式
- 数据分析|python xlwt xlrd的坑
- 机器学习|从Python入门人工智能指南
- PV-RCNN|PV-RCNN代码解读——train & test
- python|可以给AI减轻负担的Python AI库有哪些()
- Something|《Python深度学习》之卷积神经网络可视化
- Pytorch教程|Pytorch教程[01]张量操作
- Python基础|快速傅里叶变换及python代码实现
- JAVA的自学之路|【Java课程设计】【图形界面程序】【计算器】