python实现不登陆淘宝却获取到任意商品数据

一、前言

1、爬取内容均为在淘宝页面,用户能够浏览到的数据
2、用于交流学习,不会用于商用
3、本文如有侵权,请联系我删除文章

二、需要导入的库

import requests
from lxml import etree
import xlwt
from time import sleep

三、页面分析

首先,打开淘宝官网页面:传送门
在这里插入图片描述
下拉找到这个地方,点击单品,即可访问到详细页面,为了能够做到根据自己需求进行爬取,我们需要找到URL的规律。
如:
点击男手表进行访问,得到的URL如下:

https://re.taobao.com/search?keyword=%E7%94%B7%E6%89%8B%E8%A1%A8&catid=&refpid=&_input_charset=utf8&spm=a21bo.2017.201874-p4p.9.5af911d9r0a6w7&clk1=4b099603c0fb26b731424628d9163765

其实输入到keyword内容后面即可,keyword内容即是我们输入的关键词,即:

https://re.taobao.com/search?keyword=%E7%94%B7%E6%89%8B%E8%A1%A8

然后下拉到最后,发现并不是瀑布式的数据流,而且翻页式的,这样就容易多了。
点击第二页、第三页,发现规律是,在keyword后面加上page内容,page的内容即为访问的页数,即:

https://re.taobao.com/search?keyword=%E7%94%B7%E6%89%8B%E8%A1%A8&page=2
https://re.taobao.com/search?keyword=%E7%94%B7%E6%89%8B%E8%A1%A8&page=3

这样就完成了大概的爬取思路。
剩下的就是对数据的提取。
在这里插入图片描述
页面布局不是很复杂,利用xpath很容易就可以爬取下来,详细看代码部分吧。

四、代码

# -*- coding: UTF-8 -*-
"""
@Author  :远方的星
@Time   : 2021/3/12 20:28
@CSDN    :https://blog.csdn.net/qq_44921056
@腾讯云   : https://cloud.tencent.com/developer/column/91164
"""
import requests
from lxml import etree
import xlwt
from time import sleep


# 获取内容:店名、商品名、价格、付款人数
def get_content(url, param):
    response = requests.get(url=url, params=param)
    response.encoding = 'utf-8'
    response = response.text
    html = etree.HTML(response)
    goods = html.xpath('//*[@id="J_waterfallWrapper"]/div')  # 用于遍历每个商品的根节点
    list_all = list()  # 提前准备一个空列表预存数据
    for i in range(len(goods)):
        price = goods[i].xpath('./a/div[2]/p[1]/span[1]/strong/text()')[0]  # 获取价格
        goods_name = goods[i].xpath('./a/div[2]/span/text()')[0]  # 获取商品名称
        goods_shop = goods[i].xpath('./a/div[2]/p[2]/span[1]/text()')[0]  # 获取店名
        number = goods[i].xpath('./a/div[2]/p[2]/span[2]/text()')[0].replace('人付款', '')  # 获取付款人数
        list_all.append([goods_shop, goods_name, price, number])  # 存放在一个列表中
    return list_all


def main():
    keyword = input('请输入你想要爬取的商品名称:')
    page = input('请输入你想要爬取的页数:')  # 一共一百页,一页200个数据
    page = int(page) + 1
    list_all = list()
    path = 'D:/淘宝.xls'  # 工作表路径
    workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
    worksheet = workbook.add_sheet('淘宝', cell_overwrite_ok=True)  # 可覆盖  # 设置工作表名
    col = ('店家', '商品名', '价格/元', '付款人数/人')
    for i in range(0, 4):
        worksheet.write(0, i, col[i])  # 设置列名
    print('即将为你下载所需数据= =,请稍后')
    sleep(1)
    for i in range(1, page):
        base_url = 'https://re.taobao.com/search?'
        page = i
        print('正在下载第{}页内容^-^'.format(i))
        sleep(1)
        param = {
    
    
            'keyword': keyword,
            'page': page
        }
        data_list = get_content(base_url, param)  # 调用函数获取内容
        list_all.append([data_list])
        list_s = list_all[0][0]
        for j in range(len(list_s)):  # j代表每一个i循环内的行数
            data = list_s[j]
            for k in range(0, 4):  # k代表列数
                worksheet.write((i-1)*200+j+1, k, data[k])  # worksheet.write(x,y,z),x代表行,y代表列,z代表存放的内容
        print('第{}页内容下载完毕!'.format(i))
        sleep(1)
    workbook.save(path)  # 保存数据
    print('已完成所有下载任务!')


if __name__ == '__main__':
    main()


五、结果展示

在这里插入图片描述
在这里插入图片描述

六、Blogger’s speech

一个关键词,最多可能是100页(我看了几个商品都是100页),一页有200个商品数据,而且因为可能是热卖品原因,数据可能不全,但作为练习,足够了。

如果你感觉这篇文章对你有一点点帮助,还请,点赞,关注,收藏,一键三连哟。

作者:远方的星
CSDN:https://blog.csdn.net/qq_44921056
腾讯云:https://cloud.tencent.com/developer/column/91164
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

扫描二维码关注公众号,回复: 12746695 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_44921056/article/details/114730976