应用Python爬虫爬取指定天猫市廛全店商品消息_天猫爬虫

本编博客是关于爬取天猫店铺中指定店铺的所有商品基础信息的爬虫,爬虫运行只需要输入相应店铺的域名名称即可,信息将以csv表格的形式保存,可以单店爬取也可以增加一个循环进行同时爬取。

上面代码是选择了优衣库作为测试店铺,直接输入优衣库店铺的域名中关键词即可,最终表格会按照店铺名称和时间名词。

库是用来解析 json 格式的数据的,也就是 Python 中的字典格式

库是用来生成一个随机数的,这个代码中用到了两次,第一次是生成一个随机数据去获取最新的网页信息而不是缓存信息,第二次是随机一个时间,来减缓爬虫速度

都是时间库,前者一般用来生成当前时间字符串,后者本爬虫使用设置延迟时间

首先通过分析手机端天猫店铺所有商品的网页,可以发现每次下滑一页都有一个 js 被加载,这个 js 的规律可以总结一下;

通过分析可以发现每次请求 js 都可以得到一个关键信息,那就是 total_page 这个参数,这也一想就能猜到,就是当前店铺的总页码数,所以可以先取得这个数字,然后使用循环爬取全店商品;

每一页有24个商品,而请求得到的是一个类似于 json 格式的网页信息,但是并非是直接的 json,所以可以用正则表达式提取符合 json 格式的部分留用;

将每一页的信息保存到 csv 表格中,可以直接使用 csv 库的字典存储方式,非常方便;

得到了单页的信息,也得到了总页码数,只需要一个循环就可以爬取全店的商品了。

def __init__(self,storename): self.storename = storename self.url =

这个函数的用意是创建一个带有标题的表格,标题就是提取的网页信息中的 key,这个必须跟需要提取的参数保持一致。关于 csv 库按照字典格式保存信息的方式可以参考之前的一篇文章Python 内置 csv 模块简介,使用三种方式写入 csv 表格

这个函数其实跟提取信息的函数是一样的,只不过需要提取的信息不一样而已,这个函数只需要提取总页码数。具体步骤是先构造出每页请求的URL,这个需要自己去总结一个最简约的链接形式,并且尽可能模仿人工浏览。

请求网页会得到一个类似于 json 的信息,但是不是纯 json ,因此需要使用正则来处理一下,然后需要用到 json 库来转换格式为真正的 json 格式。

def get_products(self,page)的用法是跟提取总页码数一样的,只不过这个需要传入一个参数,也就是需要爬取的页码数,这样就可以改变 URL 从而爬取对应的页码的信息了。

最后提取每页的信息在 json 中是形成一个列表的形式,而每个列表又是一个字典,所以可以直接使用 csv 的多行写入的方法去保存信息。

最后一个函数就是使用循环的方式去爬取所有页面的信息并保存了,同时可以在每次爬完一页之后打印一句话作为提示,并且为了尽可能的减少IP被封的可能性,可以适当的增加一下爬取延迟。