淘宝商品爬虫Ⅰ:根据店铺名爬取淘宝商品基本信息

算是前言

之前接了几个私活,很多买方都是想要淘宝某个店铺的商品的数据。
去网上看了看,近期能用的比较少,这才写了一个用来爬取某个店铺的爬虫。

网页分析

我们先来讨论一下思路,如何获得一个店铺的所有的商品数据呢?
首先我们可以打开一家店铺的所有商品。注意点开的是所有分类
在这里插入图片描述
我们可以想一下,这既然可以链接到一个个商品,这里也就是可以获取所有商品的商品id了,id可以想成身份证一样的数字代号。

话不多说,F12,开始抓包。

找到类似这个链接的包

这里提示一下,每一页的大小大概为40kb左右,类型是html。
在这里插入图片描述
查看响应的数据。
这里是每个商品的基本数据。

在这里插入图片描述
你说你没看见id?别急,这个是格式化显示的数据,我们看一下原始数据。
该数据数据是jsonp119()内包含了一个html格式的数据,我们把内部数据放到可以格式化的网站就可以很轻松看出来了。(找不到网站的,百度 html格式化 )
在这里插入图片描述往下看,有每个商品的名、价格、销量和评价。
在这里插入图片描述这样我们就可以获得每个店家所有商品第一页的商品了。
点开第二页并点击F12检查发现,第二页的URL为:

在这里插入图片描述与第一页的相比:
在这里插入图片描述

可以看到,这里一共有两个重要的参数,一个是店铺名,一个是页码。
其他的参数就不需要修改了。

但是我们要如何确定一共有多少页呢?
我们可以试试看访问这个店家的第三页,我们可以看到除了店家推荐的十个商品就没有商品信息了,我们可以直接判断每页获取的id个数是否等于10,如果等于十就停止爬取。

爬取流程

那这样我们的方向就明确了:
在这里插入图片描述这样我们就可以获取每个商品的id号和其他基本数据了。

代码和运行结果

代码其实很简单,主要是分析的过程。

# -*- coding: utf-8 -*-
# @Time : 2021/5/12 17:07
# @Author : Leviathan_Sei
# @File : get_item_id.py
# @Python : 3.7

import requests
import time
import csv
import re


def get_id_html(store, page):
    base_url = "https://{}.tmall.com/i/asynSearch.htm?_ksTS=1618216498569_351&callback=jsonp352&mid=w-23295354947-0&wid=23295354947&path=/category.htm&spm=a1z10.1-b-s.w5001-23295377977.6.2059782don1Eg5&search=y&orderType=hotsell_desc&scene=taobao_shop&pageNo={}"
    url = base_url.format(store, page)
    cookies = {
        "Cookies":"Your cookies"
    }
    headers = {
        "Host": str(store) + ".tmall.com",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0)Gecko/20100101 Firefox/60.0'",
    }
    response = requests.get(url, cookies=cookies, headers=headers).text
    time.sleep(10)
    return response


store = "shuangfeiyan"

for page in range(1, 100):
    print("开始爬取第"+str(page)+"页")
    html = get_id_html(store, page)
    print("爬取完成")
    # 这一步的目的是清楚多余的空格
    html = re.sub('\s', '', str(html))
    item_data = {}

    # 这里使用正则表达式
    # 商品名
    data1 = re.findall('<imgalt=\\\\"(.*?)\\\\"', html)
    # 商品id
    data2 = re.findall('data-id=\\\\"(.*?)\\\\">', html)
    # 价格
    data3 = re.findall('c-price\\\\">(.*?)<', html)
    # 销量
    data4 = re.findall('sale-num\\\\">(.*?)<', html)
    # 评价
    data5 = re.findall('评价:(.*?)<', html)
    if len(data2) == 10:
        print("该店铺数据爬取完毕!\n退出!")
        break
    # 索引从第一个到倒数第11个。
    for i in range(0, len(data2)-10):
        item_data[data2[i]] = []
        # 名字
        item_data[data2[i]].append(data1[i])
        # id
        item_data[data2[i]].append(data2[i])
        # 现价
        item_data[data2[i]].append(data3[i])
        # 总销售量
        item_data[data2[i]].append(data4[i])
        # 评论数
        item_data[data2[i]].append(data5[i])
    print("开始保存")
    with open(store + 'data.csv', 'a', encoding='utf-8-sig', newline='') as f:
        w = csv.writer(f)
        for k, v in item_data.items():
            print(v)
            w.writerow(v)
    print("第"+str(page)+"页保存完毕!")


下面是保存的文件内部截图:
在这里插入图片描述

Cookies去哪找?

另外很多人可能不清楚cookies哪来的,就在消息头的请求头内,但是不建议使用火狐浏览器的朋友直接复制,因为他中间可能会有省略号,建议去谷歌登录淘宝后再去复制。
在这里插入图片描述

火狐浏览器解决方案

另外使用火狐浏览器的朋友也不用灰心,因为我也是使用的火狐浏览器,所以我自己写了个转换的代码。将Cookie内的全部复制下来。
在这里插入图片描述

这个也不是很好复制,我是一直左键不松,全选后使用右键点击复制。然后放到本地的文本文件中。在同级目录新建python文件,内部为:

# -*- coding: utf-8 -*-
# @Time : 2021/4/12 19:26
# @Author : Leviathan_Sei
# @File : huohuCookie.py


with open('cookie.txt','r',encoding='utf-8') as f:
    cookies = f.readlines()
newCookie = ""
for cookie in cookies:
    cookie = cookie.replace('\t','\":')
    cookie = cookie.replace('\n', ',\n')
    cookie = "\""+cookie
    newCookie += cookie
with open('cookie.txt','w',encoding='utf-8') as f:
    f.write(newCookie)

后记

就写到这里吧,一次写太多可能看不完。
这次博客记录了如何通过店铺名去爬取店铺的所有商品的基本信息。这里包括商品的名称、id、价格、销量和评价。

下次博客就要写具体的商品信息了,包括商品的评论,好评和差评,以及最高价与最低价等

另外,大家做爬虫的时候尽量设置时间长一点的睡眠时间,这样对我们和商家都是有好处的

  • 9
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值