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

2023-10-27

一、关于淘宝网

淘宝网是亚太地区较大的网络零售、商圈,由阿里巴巴集团在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 csv


def 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_encoding
        return r.text
    except:
        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=0
    for g in ilt:
        count = count+1
        print(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='+goods
    infoList =[]
    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、淘宝网是不允许爬虫的,所以此帖仅供学习爬虫技术,不建议大家对淘宝网网页进行大规模爬取。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 毕业设计--------登录鉴权

    前言 提示 这里只是记录一下自己做毕业设计的思路 前端采用vue 后端用springCloud 一 拦截器 Configuration public class InterceptorConfig extends WebMvcConfigu
  • android button setMinHeight setMinWidth 无效解决办法

    setMinWidth 0 setMinHeight 0 setMinimumWidth 0 必须同时设置这个setMinimumHeight 0 必须同时设置这个两个方法同时设置才能生效 转载于 https www cnblogs com
  • 人体骨骼关键点检测的初尝试

    关于人体骨骼关键点模型的介绍 请见上一篇博客 PaddleHub人体姿态检测模型pose resnet50 mpii 由于群友讨论到舞蹈视频 所以想了下 可以用这个搞事情 来个荧光棒舞怎么样 于是我打算拿寡姐来试试 使用关键点检测后 看来检
  • PAT乙级 1110 区块反转 (25 分) C++

    1110 区块反转 25 分 给定一个单链表 L 我们将每 K 个结点看成一个区块 链表最后若不足 K 个结点 也看成一个区块 请编写程序将 L 中所有区块的链接反转 例如 给定 L 为 1 2 3 4 5 6 7 8 K 为 3 则输出应
  • 【LLVM】Llvm 源码编译安装

    目录 概述 搭建CMake环境 搭建SVN环境 搭建Llvm环境 一 下载Llvm源码 二 下载Clang项目 三 下载 Compiler RT 四 下载测试部分代码 可选 并且比较大 五 离线下载相关包 可选 六 创建build文件夹编译
  • ubuntu18.04卡在“【ok】Starting Gnome Display Manager“问题处理

    ubuntu18 04卡在 ok Starting Gnome Display Manager 问题处理 目录标题 ubuntu18 04卡在 ok Starting Gnome Display Manager 问题处理 处理 处理 原因
  • 手写浅拷贝和深拷贝

    浅拷贝 浅拷贝是指 一个新的对象对原始对象的属性值进行精确地拷贝 如果拷贝的是基本数据类型 拷贝的就是基本数据类型的值 如果是引用数据类型 拷贝的就是内存地址 如果其中一个对象的引用内存地址发生改变 另一个对象也会发生变化 Object a
  • letcode算法题集锦

    day01 letcode9 买卖股票的最佳时机 给定一个数组 prices 它的第 i 个元素 prices i 表示一支给定股票第 i 天的价格 你只能选择 某一天 买入这只股票 并选择在 未来的某一个不同的日子 卖出该股票 设计一个算
  • ec服务器如何显示4d,ECToolbox软件四种公式在心肌灌注显像中计算左心室射血分数的应用...

    摘要 目的 比较ECToolbox 4种公式 R 0 R 1 R 2 R 3 计算心电图门控心肌灌注显像 ECG gated myocardial perfusion SPECT GMPS 左心室射血分数与平衡法心血池显像 equilibr
  • el-input (输入框)校验 只能输入数字和小数

    备注 我写的是判断输入的是否数字或小数 如果只需判断是否是数字可直接复制elementui官网上的案例即可 1 一定要写 prop aa 不然是没效果的 2 仿照elementui官网 绑定rules 3 写校验 tirgger chang
  • gcj Round 1- A -B题

    输入 E R N v1 v2 vn 有n个工作 没做一个消耗一定的能量 但可以得到R个能量 最多为E 多则去除 初始能量是E 每件工作的收益是 v i u i u i 做i使用的能量 u i gt 0 u i lt E 解 如果规定u i
  • VUE layui之table数据表格使用详细说明

    步骤 一 layui官网下载包 二 将解压的文件放入static文件夹 如果没有就在根目录下新建一个 三 public文件下index html中引入css及js文件 这里注意顺序和你下载的版本号 四 vue页面中使用
  • java3D 第三章 java3D基本图形类详解

    第三章 java 3D基本图形功能 java 3D基本图形功能 java 3D场景式管理 SimpleUniverse类及其方法 ViewingPlatform类及方法 包的关系 Shape3D类及方法 Appearance类及方法 Bra
  • 大数据技术——Scala语言基础

    Scala语言概述 计算机的缘起 数学家阿隆佐 邱奇 Alonzo Church 设计了 入演算 这是一套用于研究函数定义 函数应用和递归的形式系统 入演算被视为最小的通用程序设计语言 入演算的通用性就体现在 任何一个可计算函数都能用这种形
  • 对于stm32,初学者用库函数好还是直接对寄存器操作比较好

    在stm32教学光盘的A里 有两个开发指南 一个是库函数版本 一个是寄存器版本 那么问题来了 作为一个初学者 我应该用库函数好还是直接对寄存器操作比较好 为此我搜集了一些资料 找到了一些可以借鉴的文章 首先 两个都是C语言 从51过渡过来的
  • PBFT代码实现

    本篇文章主要是PBFT共识的简单实现 其中有许多地方都做了简化 PBFT的原理已在上篇文章中描述过 如果对PBFT的原理不太清晰的的可以进行查看 文章地址 共识算法学习总结 代码实现的主要功能有 通过客户端添加区块 使用libp2p的mdn
  • CVTE笔试面试经验分享(硬件)—2020秋招

    秋招流程 投简历 在线笔试 技术面试一 技术面试二 综合面试 投简历 简历是直接在CVTE的校招网上投递的 然后可以选择面试城市和笔试时间 在线笔试 简历筛选通过后就会通知进行线上的笔试 笔试结果各个岗位不同等待的也不同 硬件笔试都是基础
  • 【Linux】基本指令(一)

    目录 一 ls指令 1 不指定目录 ls 2 指定目录 ls huangchao 3 加选项 ls l 4 加选项 ls a 5 选项组合 ls l a 6 选项 指定文件夹 ls l a huangchao 7 ls 指令总结 二 mkd
  • Opencascade安装教程(Visual Studio 2017)

    之前尝试了一次Visual Studio 2019 Opencascade7 5 0的编译 编译成功了 但是在Qt中使用的时候一堆错误没有解决 加之之前的项目需要 所以卸载了VS2019 改安装了VS2017 如果不想找太多错误 不妨可以安
  • Python实现淘宝商品数据爬取——静态网页爬虫(仅供学习,切勿无限制爬取)

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