周五. 5 月 2nd, 2025

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号联系作者立即删除!

对爬虫技术和运营技术感兴趣的朋友可以看下这个

亿联会-Riley,公众号:爬虫练习生第一期爬虫交流会预告和说明

目标:

aHR0cHM6Ly9tZWlsaW5neWMudG1hbGwuY29tL2NhdGVnb3J5Lmh0bQ==

F12,打开开发者工具,刷新页面,找到数据所在请求,发现只有1个请求:

响应内容可以看出是HTML代码,但是出现了很多转义字符,这里要记得去除掉响应内容的转义字符,不然无法使用xpath等去解析。

另外,该请求的接口链接与网页链接不一致,所以即便我们使用开发者工具的元素模块去写xpath语法,也要多次验证是否获取到了完整的数据。

使用开发者工具左边的小箭头点击标题等内容,会发现我们需要的内容在上图位置,每个带有item4line1属性的div下包含4个产品的数据,总共有17个这样的div标签,也就意味着有68个产品,但是通过分析,该页面一页展示的产品数量是60个,那么多出来的8个产品是什么呢?其实是推荐产品

所以我们需要把最后这8个产品数据去掉,由于这些数据的标签结构都是一样,所以这里直接使用切片方法。

接下来我们就可以获取所有产品的数据了,这里需要注意,为了方便我们提取数据写入表格,我们需要先提取所有的dl标签,dl标签内包含所有需要的数据,再用xpath提取指定数据。

下一步,我们来看一下请求的参数:

通过刷新页面,发现mid和wid没有变化,_ksTS发生了变化,但是从值上来看,不像加密参数,删除该参数后,请求仍然成功,所以实际上该请求很简单,并没有遇到很强的反爬,为了爬虫顺利,需要登录账号,用登录后的cookie发送请求。

上代码:

import requests, re, openpyxlfrom lxml import etreedef createParams(page): params = { mid: fw-{ID}-0, wid: ID, path: /category.htm, search: y, pageNo: page } return paramsif __name__ == __main__: ID = input(请输入店铺ID: ) cookie = input(请输入cookie: ) store = input(请输入店铺链接: ) #meilingyc.tmall.com headers = { authority: store, accept: text/javascript, application/javascript, application/ecmascript, application/x-ecmascript, */*; q=0.01, accept-language: en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7, bx-v: 2.5.1, cache-control: no-cache, # Requests sorts cookies= alphabetically cookie: cookie, dnt: 1, pragma: no-cache, referer: fhttps://{store}/category.htm?spm=a1z10.1-b.w5001-14916026912.10.217d5904GZdznk&search=y&scene=taobao_shop, sec-ch-ua: “Not.A/Brand”;v=”8″, “Chromium”;v=”114″, “Google Chrome”;v=”114″, sec-ch-ua-mobile: ?0, sec-ch-ua-platform: “Windows”, sec-fetch-dest: empty, sec-fetch-mode: cors, sec-fetch-site: same-origin, user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36, x-requested-with: XMLHttpRequest, } response = requests.get(fhttps://{store}/i/asynSearch.htm, headers=headers, params=createParams(1)).text.replace(\\, ) pages = re.findall(<b class=”ui-page-s-len”>1/(\d+)</b>, response, re.S)[0] #获取最大页数 print(pages) wb = openpyxl.Workbook() sheet = wb.active header = [标题, 销量, 价格, 链接] sheet.append(header) for i in range(1, int(pages)+1): response = requests.get(https://meilingyc.tmall.com/i/asynSearch.htm, headers=headers, params=createParams(i)).text.replace(\\, ) print(response) res = etree.HTML(response) a = res.xpath(//div[@class=”item4line1″]/dl)[:-8] ##需要注意,文章中是一行4个产品,实际请求可能是一行5个,也就是索引要取到-10,需要看情况调整xpath语法,并且去除结尾2行推荐产品,不要从左向右取,因为最后一页可能达不到60个产品的固定数量 for i in a: title = i.xpath(.//a[@class=”item-name J_TGoldData”]/text())[0].strip() sales = i.xpath(.//span[@class=”sale-num”]/text())[0].strip() price = i.xpath(.//span[@class=”c-price”]/text())[0].strip() link = https + i.xpath(.//a[@class=”J_TGoldData”]/@href)[0].strip() print(title, sales, price, link) sheet.append([title, sales, price, link]) wb.save(f天猫-{store}.xlsx) input(爬取完成-按任意键继续)

Avatar photo

作者 UU 13723417500

友情提示:现在网络诈骗很多,做跨境电商小心被骗。此号发布内容皆为转载自其它媒体或企业宣传文章,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。---无意冒犯,如有侵权请联系13723417500删除!

声明本文由该作者发布,如有侵权请联系删除。内容不代表本平台立场!

发表回复

服务平台
跨境人脉通
选品平台
U选Market
展会&沙龙
群通天下