如果在官网唯品会搜索护肤套装,返回的页面如下
下拉右边的滚动条,可以发现滑动到底部,页面会自动刷新商品数据,显示的是ajax交互,表示商品信息存储在json界面,然后拖到最后就可以找到翻页按钮,如下图
尝试抓取包裹,获取真实商品数据所在的URL页面。首先点击鼠标右键进入巡检界面,然后点击网络刷新页面。此时,将返回所请求的信息。您需要进行搜索和筛选,以找到包含特定商品信息的链接文件。经过检查,发现大部分内容都在回调相关的文件中,如下
对这七个文件进行分析后,发现只有四个有用,第二个rank文件包含了当前页面所有产品的编号。
然后剩下的三个v2文件对这120个商品进行拆分,如下(商品序号都从0开始)。
所以在搜索页面上搜索120个商品的信息的真实数据接口,然后用其中一个链接文件去尝试获取爬虫数据,看结果是什么,然后总结规则,看是否可以同时爬取页面中的所有数据。
添加关于user-agent、cookie和refer的信息,然后设置post-request头(用鼠标单击头),复制粘贴页面接口数据的url,赋值,请求数据。代码如下,例如,首先请求20个商品的数据。
获取cookie,可以取消对回调的过滤,然后选择默认返回的第一个建议文件,如下
注意:根据浏览器返回的内容设置请求标头。
输出结果为:(最终输出结果与接口返回的结果一致)
因此,我们可以探索这三个v2文件中实际请求URL之间的差异,并轻松找出其中的规律。
对比三个商品信息的URL,发现根本的区别在于中间的productIds参数,所以只要获得所有商品的id,就可以获得所有的商品信息,这就是URL发现的规则。
只是所有的产品ID都存储在第二个rank文件中,所以需要先请求这个链接文件来获取产品ID信息,然后重新组合url,最后获取详细的产品信息。
要实现翻页的要求,可以查一下控制页数的参数,如下,比如第一页有120条数据,其中pageOffset参数为0。
第二页的pageOffset参数是120,以此类推,第三页的参数是240,以后每翻一页增加120,其余参数几乎不变。
因此,请求的代码如下
输出结果是:(您可以成功获取产品id的信息)
解析json数据,即将没有固定格式的输出数据转换成python可以操作的格式。代码如下所示
输出结果是:(包括所需商品数据的id信息)
验证是否是所有商品的数据量,即收购商品的id数量(这里是pid字段数据)是否等于120。代码如下所示
输出结果是:(验证之后,注意第一次打印输出了一个列表嵌套字典的数据)
因此,您可以再次循环,以获取每个商品的id信息。注意这里的product_url的构造,删除中间商品id的所有信息再用format方法替换。代码如下所示
输出结果是:(截取部分输出结果)
可以发现,就像原始的商品id信息一样,具体的信息数据需要进行格式转换,然后提取,比如商品的名称、品牌、价格等。
输出结果如下:(可以正常获取相关信息。这里以商品的标题、品牌、售价为例,还可以获取其他更详细的数据)
最后一步是在本地写入采集的数据:
输出如下:(数据被抓取并保存在本地)
整个过程可以封装成一个函数,也可以将数据以csv或xlsx的形式存储在本地。这里只列出txt文本数据的存储。
这里,如果n=4,再次运行代码,输出结果如下:(为了查看数据量,用sublime打开txt文件,可以发现刚好是4页商品的数量之和,所以整个唯品会商品信息的抓取到这里就完成了)
本文为转载,如有侵权,请联系边肖删除!版权归作者所有!
在这里获得一些源代码!