100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 淘宝商品爬虫Ⅰ:根据店铺名爬取淘宝商品基本信息

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

时间:2020-02-23 22:08:35

相关推荐

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

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

算是前言网页分析爬取流程代码和运行结果Cookies去哪找?火狐浏览器解决方案后记

算是前言

之前接了几个私活,很多买方都是想要淘宝某个店铺的商品的数据。

去网上看了看,近期能用的比较少,这才写了一个用来爬取某个店铺的爬虫。

网页分析

我们先来讨论一下思路,如何获得一个店铺的所有的商品数据呢?

首先我们可以打开一家店铺的所有商品。注意点开的是所有分类

我们可以想一下,这既然可以链接到一个个商品,这里也就是可以获取所有商品的商品id了,id可以想成身份证一样的数字代号。

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

找到类似这个链接的包

这里提示一下,每一页的大小大概为40kb左右,类型是html。

查看响应的数据。

这里是每个商品的基本数据。

你说你没看见id?别急,这个是格式化显示的数据,我们看一下原始数据。

该数据数据是jsonp119()内包含了一个html格式的数据,我们把内部数据放到可以格式化的网站就可以很轻松看出来了。(找不到网站的,百度 html格式化 )

往下看,有每个商品的名、价格、销量和评价。

这样我们就可以获得每个店家所有商品第一页的商品了。

点开第二页并点击F12检查发现,第二页的URL为:

与第一页的相比:

可以看到,这里一共有两个重要的参数,一个是店铺名,一个是页码。

其他的参数就不需要修改了。

但是我们要如何确定一共有多少页呢?

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

爬取流程

那这样我们的方向就明确了:

这样我们就可以获取每个商品的id号和其他基本数据了。

代码和运行结果

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

# -*- coding: utf-8 -*-# @Time : /5/12 17:07# @Author : Leviathan_Sei# @File : get_item_id.py# @Python : 3.7import requestsimport timeimport csvimport redef get_id_html(store, page):base_url = "https://{}./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) + ".","user-agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0)Gecko/0101 Firefox/60.0'",}response = requests.get(url, cookies=cookies, headers=headers).texttime.sleep(10)return responsestore = "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)# 商品iddata2 = 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])# iditem_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 : /4/12 19:26# @Author : Leviathan_Sei# @File : huohuCookie.pywith 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 = "\""+cookienewCookie += cookiewith open('cookie.txt','w',encoding='utf-8') as f:f.write(newCookie)

后记

就写到这里吧,一次写太多可能看不完。

这次博客记录了如何通过店铺名去爬取店铺的所有商品的基本信息。这里包括商品的名称、id、价格、销量和评价。

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。