Python实现淘宝商品数据爬取——静态网页爬虫(仅供学习,切勿无限制爬取)

本文主要是介绍Python实现淘宝商品数据爬取——静态网页爬虫(仅供学习,切勿无限制爬取),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、关于淘宝网

淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在2003年5月创立。淘宝网是中国深受欢迎的网购零售平台,拥有近5亿的注册用户数,每天有超过6000万的固定访客,同时每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品。

二、我们的目标是什么?

1、爬取淘宝页面某类商品的价格、名称、店家地址、交易数量;
2、以列表的形式将每一个商品的数据存入.csv文件中;
3、实现与用户的交互功能,不用修改程序也可以进行爬虫;
4、打包程序,以方便更换设备时也可以使用。

三、淘宝网爬虫思路

警告

警告:淘宝网的robots协议设定不允许爬虫,本文仅供爬虫学习,切勿对淘宝网进行大规模爬虫,否则后果自负

爬虫思路

淘宝网“每天的在线商品数已经超过了8亿件,平均每分钟售出4.8万件商品”,如此巨大的数据量,如何在淘宝网上爬取下来呢?
其实,淘宝网的搜索功能就是一个“爬虫”,通过键入“关键词”,实现对服务器的访问,返回你需要的商品序列。一般情况下,返回100页,每页48或60个商品。如下图:返回页数
1、我们需要做的是对每一页进行遍历,爬取每个商品的价格、名称、店家地址、交易数量等数据。
2、这时候我们需要看看“源码”(任意位置右键→查看网页源代码),淘宝网返回静态网页,采用html编写,源码如下图:源码
3、查看“上图源码”,我们发现:
价格数据为"view_price":“8.50”;
名称数据为"raw_title":“爱好圆珠笔按压式子弹头油笔批发办公学生用”
店家地址数据为"item_loc":“浙江 温州”
交易数量数据为"view_sales":“1.0万+人付款”
4、之后我们需要用python的re(正则表达式)库对上述数据进行提取(关于正则表达式的编写,大家可以看一下:正则表达式-菜鸟教程)
5、提取完成之后,就是存储的问题了,我们需要把提取出来的数据用特定格式存储在我们的计算机中,本文采用的存储格式是csv。
以上就是整个“淘宝网爬虫”思路。

四、程序编写

#--author--张俊杰@Nick
#coding:utf-8
import requests
import re
import time
import csvdef getHTMLText(url):try:#每次登陆淘宝,淘宝都会以加密方式返回登陆账号和密码信息,如果使用程序访问的话,需要发送post请求,这时需要发送cookie,以实现自动登录。请使用自己的cookie,复制到header字典中。header={"User-Agent":"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36",
"cookie":“输入你的cookie”}r = requests.get(url,headers=header,timeout = 30)r.raise_for_status()r.encoding = r.apparent_encodingreturn r.textexcept:return ""def parsePage(ilt,html):try:#请百度搜索正则表达式的菜鸟教程,勤加练习,必有大成。plt = re.findall(r'\"view_price\"\:\"[\d\.]*\"',html)tlt = re.findall(r'\"raw_title\"\:\".*?\"',html)loc = re.findall(r'\"item_loc\"\:\".*?\"',html)sale = re.findall(r'\"view_sales\"\:\"[\d\.]*.*?\"',html)for i in range(len(plt)):price = eval(plt[i].split(':')[1])title = eval(tlt[i].split(':')[1])location = eval(loc[i].split(':')[1])sales = eval(sale[i].split(':')[1])ilt.append([price,title,location,sales])except:print("")def printGoodsList(ilt):tplt = "{:4}\t{:6}\t{:8}\t{:8}\t{:8}"print(tplt.format("序号","价格","商品名称","商品地址","付款数量"))output_list=["序号","价格","商品名称","商品地址","付款数量"]#存储路径需根据需要更改with open('C:/Users/你杰哥/Desktop/python/淘宝/'+str(goods)+'('+str(depth*48)+'条数据)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile:w=csv.writer(csvfile)w.writerow(output_list)csvfile.close()count=0for g in ilt:count = count+1print(tplt.format(count,g[0],g[1],g[2],g[3]))out_putlist=[count,g[0],g[1],g[2],g[3]]#存储路径需根据需要更改with open('C:/Users/你杰哥/Desktop/python/淘宝/'+str(goods)+'('+str(depth*48)+'条数据)'+'.csv',"a+",encoding='GB18030',newline='') as csvfile:w=csv.writer(csvfile)w.writerow(out_putlist)csvfile.close()def main(goods,depth):start_url='https://s.taobao.com/search?q='+goodsinfoList =[]for i in range(depth):try:url = start_url + '&s='+ str(44*i)# 下面是我的网址简化过程,最好学习一下。
#1、https://s.taobao.com/search?q=圆珠笔&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48&s=0
#2、https://s.taobao.com/search?q=圆珠笔&imgfile=&js=1&stats_click=search_radio_all%3A1&initiative_id=staobaoz_20190826&ie=utf8&p4ppushleft=1%2C48
#3、https://s.taobao.com/search?q=圆珠笔
#4、这个网址就可以实现我们需要的数据返回。html= getHTMLText(url)parsePage(infoList,html)except:continue#print(html)        printGoodsList(infoList)#实现超级简单的用户交互,想爬取什么就爬取什么
goods=input("请输入你需要搜索的商品:")
#本文仅供学习,爬虫深度的设置,请理性设置
depth=int(input("请输入需要爬取的页数(请尝试在淘宝中搜索该商品关键词,查看返回页码,请理性设置爬虫深度):"))
#传参,需把外部参数传入main函数中。
main(goods,depth)
#提醒
print("数据爬取结束")
time.sleep(10)

五、封装TB.py成.exe文件

在TB.py同目录下右键打开cmd,执行pyinstaller -F TB.py #TB.py为编写的python文件(如果不会封装,请看我上一篇文章)打包TB.py

六、执行TB.exe文件

1、双击TB.exe;
2、输入关键词(比如圆珠笔)、爬虫页数(depth)(比如2);输入关键词、depth
3、爬虫结束

爬虫结束
4、爬虫结果
爬虫结果

七、总结

1、Python程序简洁,各种第三方库支持,爬虫方便;
2、在初次爬取淘宝网时出现了“无法访问”的问题,这是因为程序访问受限,需发送post请求,创建字典,发送User-Agent和cookie;
3、静态网页爬虫需对网页源代码进行分析,确定数据位置和特征;
4、正则表达式是一种非常简便的数据匹配方式,请认真学习用法,勤加练习;
5、程序编写、运行会遇到很多的问题,耐心解决;
6、淘宝网是不允许爬虫的,所以此帖仅供学习爬虫技术,不建议大家对淘宝网网页进行大规模爬取。

这篇关于Python实现淘宝商品数据爬取——静态网页爬虫(仅供学习,切勿无限制爬取)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/243570

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd