一、前言
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
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。