【从零开始学爬虫】采集京东商品信息

2023-10-31

l 采集网站

【场景描述】采集京东电视分类中的所有商品信息。

【使用工具】前嗅ForeSpider数据采集系统,免费版本下载链接:http://www.forenose.com/view/forespider/view/download.html

【入口网址】https://list.jd.com/list.html?cat=737,794,798&ev=4155_97865&sort=sort_rank_asc&trans=1&JL=3_%E7%94%B5%E8%A7%86%E7%B1%BB%E5%9E%8B_%E5%85%A8%E9%9D%A2%E5%B1%8F#J_crumbsBar

【采集内容】采集亚马逊搜索关键词搜索出来的商品信息,包括商品名称、价格、店铺和商品链接。

图片

【采集效果】如下图所示:

图片

l 思路分析

配置思路概览:

图片

l 配置步骤

一. 新建采集任务

选择【采集配置】,点击任务列表右上方【+】号可新建采集任务,将采集入口地址填写在【采集地址】框中,【任务名称】自定义即可,点击下一步。

图片

选择普通翻页,点击完成按钮,即创建任务完成。

图片

二. 商品翻页链接获取

1.在浏览器中点击第二页,第三页和第四页的翻页,将翻页链接复制出来,观察链接规律。

图片

发现翻页链接规律为:

https://list.jd.com/list.html?cat=737%2C794%2C798&ev=4155_97865%5E&pvid=ebb0e3c519de4f649049b645a6598eed&page=+2*页码-1+&s=+5+(页码-2)*6+7&click=0

2.打开刚才新建的模板任务,选中翻页链接,打开脚本窗口,新建一个脚本。

图片

图片

3.根据刚才发现的翻页规律,用脚本来拼翻页链接。具体如下所示:

图片

脚本文本:

url u;//定义一个url
for(var i=1;i<=10;i++)//i表示页数,此时表示采集1-10页商品数据
{ 
     var a=2*i-1;//定义a为2*页数-1
     var b=5+(i-2)*6;//定义b为5+(页数-2)*6
u.urlname = "https://list.jd.com/list.html?cat=737%2C794%2C798&ev=4155_97865%5E&pvid=ebb0e3c519de4f649049b645a6598eed&page="+a+"&s="+b+"7&click=0";//根据翻页规律拼出翻页请求
   u.title = URL.title+"#"+"第"+i+"页";  //返回链接名称为第i页
   u.entryid = CHANN.id;
   u.tmplid = 2; //关联模板2
   RESULT.AddLink(u);
}

4.采集预览,复制任意一条翻页,在浏览器中打开,看是否为该页内容。

图片

三.商品数据抽取

1.新建模板02,在模板02下建一个数据抽取,具体操作如下图所示。

图片

2.数据建表

点击图中加号,新建一个数据表,然后添加字段,各字段属性如下图所示:

图片

3.将新建好的数据表,关联到模板中去,如下图所示:

图片

4.字段抽取

字段抽取使用脚本抽取的方法,在数据抽取模板中新建一个脚本窗口。

图片

5.采集预览,复制一条翻页的链接,在浏览器中打开。

图片

6.点击F12,点击指针(源码框左上角),让指针指到第一个商品处,在右侧源码中找到对应位置。

图片

经观察发现,每个商品的内容在class为【gl-warp clearfix】的节点下的每个name为【li】的节点中。

图片

打开第一个商品的源码,发现class为【p-price】节点中有商品的价格,class为【p-name p-name-type-3】节点中有商品的名称和url,class为【p-shop】节点中有商品的店铺名。

图片

价格位置如下图所示:

图片

商品名称和url位置如下图所示:

图片

商品店铺名位置如下图所示:

图片

7.根据以上观察,编写数据抽取脚本,具体如下图所示:

图片

脚本文本如下所示:

record re;//定义一个数据返回类型
var orders = DOM.FindClass("gl-warp clearfix","ul");//定义orders为class为【gl-warp clearfix】的节点
var order=orders.child;//定义order为orders的子节点,即第一个name为【li】的节点
while(order)//写一个循环,获取所有name为【li】的节点
{
	var pri=DOM.FindClass("p-price","div",order).child;//定义pri为order节点下的class为【p-price】节点的子节点
    var ti=DOM.FindClass("p-name p-name-type-3","div",order);//定义ti为order节点下的class为【p-name p-name-type-3】节点
    var sho=DOM.FindClass("p-shop","div",order).child;//定义sho为order节点下的class为【p-shop】节点的子节点
	re.tit = DOM.GetTextAll(ti.child.child);//返回tit值为ti节点的子节点的子节点中的所有文本内容
	re.price = DOM.GetTextAll(pri);//返回price值为pri节点中所有文本内容
	re.shop = DOM.GetTextAll(sho);//返回shop值为sho节点中所有文本内容
	re.url_ = ti.child.href;//返回url_值为ti节点的子节点的href值
	RESULT.AddRec(re,this.schemaid);	//返回以上数据
	order = order.next;//定义order为order下一个节点,即下一个name为【li】的节点
}

8.采集预览

点击右上角采集预览,双击任意一条翻页链接,看是否采集到商品信息,如下图所示:

图片

l 采集步骤

模板配置完成,采集预览没有问题后,进行数据采集。

1.首先要建立采集数据表:

选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为【jingdong】(注意命名不能用数字和特殊符号),点击【确定】。

图片

创建完成,勾选数据表。

图片

2.选择【数据采集】,勾选任务名称,点击【开始采集】,则正式开始采集。

图片

3.可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。

图片

图片

4.导出的文件打开如下图所示:

图片

前嗅简介

前嗅大数据,国内领先的研发型大数据专家,多年来致力于为大数据技术的研究与开发,自主研发了一整套从数据采集、分析、处理、管理到应用、营销的大数据产品。前嗅致力于打造国内第一家深度大数据平台!

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

【从零开始学爬虫】采集京东商品信息 的相关文章

  • 使用 Python Multiprocessing Pool.map() 的问题在 Python 3.7.2 中变得棘手,但在 3.6.2 中很快完成

    我刚刚将Python从3 6 2 gt 3 7 2并且遇到了问题multiprocessing图书馆 我在 Django 应用程序中使用它 该应用程序在工作函数中使用 Django 特定的函数 见下文 在我的代码中 我有以下内容 impor
  • sklearn 估计器管道的参数无效

    我正在实现 O Reilly 书中的一个示例 Python 机器学习简介 使用 Python 2 7 和 sklearn 0 16 我正在使用的代码 pipe make pipeline TfidfVectorizer LogisticRe
  • 如何在 Debian 上的 virtualenv 中安装 numpy?

    注 参见这另一篇文章 https stackoverflow com questions 6442754 how to install h5py numpylibhdf5 as non root on a debian linux syst
  • str.translate 与 str.replace - 何时使用哪一个?

    何时以及为什么使用前者而不是后者 反之亦然 目前尚不完全清楚为什么有些人使用前者以及为什么有些人使用后者 它们有不同的目的 translate只能用任意字符串替换单个字符 但一次调用可以执行多次替换 它的参数是一个特殊的表 它将单个字符映射
  • scipy.optimize on pandas dataframe

    我试图搜索它 但结果很差 有人可以向我解释一下如何在 Pandas DataFrame 上执行 optimize minimize 以便最小化 DataFrame 中的类别和结果列之间的错误 考虑这个例子 import pandas as
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • 来自 pandas 数据帧的烛台图,用日期替换索引

    此代码给出了带有移动平均线的烛台图 但 x 轴位于索引中 我需要 x 轴位于日期中 需要做什么改变 import numpy as np import pandas as pd import matplotlib pyplot as plt
  • 如何计算数据框中按另一列的列值分组的一列的连续字符串值?

    我有以下数据框 Levels Labels Confidence 0 Hands 0 8 0 Leg 0 7 0 Eye 0 9 1 Ear 0 9 1 Eye 0 8 2 Hands 0 9 2 Eye 0 8 3 Eye 0 8 我想检
  • 无法在 virtualenv 中安装 libxml2

    我有一个问题libxml2蟒蛇模块 我正在尝试将其安装在python3 虚拟环境使用以下命令 pip install libxml2 python3 但它显示以下错误 Collecting libxml2 python3 Using cac
  • 查找正在导入哪些 python 模块

    从应用程序中使用的特定包中查找所有 python 模块的简单方法是什么 sys modules是将模块名称映射到模块的字典 您可以检查其键以查看导入的模块 See http docs python org library sys html
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • 如何从hdfs读取文件[重复]

    这个问题在这里已经有答案了 我在 project1目录下的hadoop文件系统中有一个文本文件名mr txt 我需要编写 python 代码来读取文本文件的第一行 而不将 mr txt 文件下载到本地 但我无法从 hdfs 打开 mr tx
  • 通过 Python 循环浏览网络上的目录并显示其内容(文件和其他目录)

    同样的道理在Python中处理从源目录到目标目录的一组文件 https stackoverflow com questions 2593399 process a set of files from a source directory t
  • Python-验证我的文档 xls 中是否存在工作表

    我正在尝试在空闲时间设计一个小程序 加载 xls 文件 然后在要扫描的文档中选择一张纸 步骤1 用户导入 xls文件 导入程序后检查文件是否存在 我能做到的 第 2 步 我要求用户提供要分析的文档表 xls 的名称 这就是它停止的地方 该程
  • Python 属性和 Swig

    我正在尝试使用 swig 为一些 C 代码创建 python 绑定 我似乎遇到了一个问题 试图从我拥有的一些访问器函数创建 python 属性 方法如下 class Player public void entity Entity enti
  • Seaborn 中没有线性拟合的散点图

    我想知道是否有办法关闭seaborn中的线性拟合lmplot或者是否有一个等效函数可以生成散点图 当然 我也可以使用 matplotlib 但是 我发现 seaborn 中的语法和美学非常吸引人 例如 我想绘制以下情节 import sea
  • Django 2、python 3.4 无法解码 urlsafe_base64_decode(uidb64)

    我正在尝试通过电子邮件激活用户 电子邮件有效 编码有效 我使用了 django1 11 中的方法 该方法运行成功 在 Django 1 11 中 以下内容成功解码为 28 其中 uidb64 b Mjg force text urlsafe
  • 无法导入QUERY_TERMS

    我正在运行一个网站Python and Django Django filters 2 1 installed Django 2 1 installed 当我运行时 我收到以下错误 importError Could not import
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的

随机推荐

  • STANet基于时空自注意力的神经网络--变化检测模型

    STANet基于时空自注意力的神经网络检测模型 A spatial temporal attention based method and a new dataset for remote sensing image change dete
  • C#----使用继承选择器创建继承窗体

    欢迎大家提出意见 一起讨论 转载请标明是引用于 http blog csdn net chenyujing1234 代码 VS2008 http www rayfile com zh cn files 68b23066 9aab 11e1
  • mos管驱动电路设计

    对于开关电源来说 驱动电路作为控制电路和功率电路的接口 其作用至关重要 本文就将详细探讨开关电源的驱动电路的参数设计以及驱动芯片的选型 常用的mos管驱动电路结构如图1所示 驱动信号经过图腾柱放大后 经过一个驱动电阻Rg给mos管驱动 其中
  • 集合nim(C++)

    题目 给定 n 堆石子以及一个由 k 个不同正整数构成的数字集合 S 现在有两位玩家轮流操作 每次操作可以从任意一堆石子中拿取石子 每次拿取的石子数量必须包含于集合 S 最后无法进行操作的人视为失败 问如果两人都采用最优策略 先手是否必胜
  • RFID标签打印机在加工制造业中的应用

    1 行业背景 在物联网家电制造 机械制造 电子元器件 电器等产品加工制造行业中 通常都需要打印标签直接贴到产品上 如 铭牌标签 条码序列号标签 合格证标签 电路图标签 RFID标签等等 传统的部分企业的这些标签是印刷后粘贴到产品上 但是随着
  • 从小白到专家的五个阶段,你处在哪里?

    专家和新手的区别在哪里 每一个程序员都有一个梦想 成为领域内的专家 专家和新手有什么不同 1970年代左右 德雷福斯兄弟通过对飞行员 国际著名象棋大师的技能习得进行研究 他们发现专家和新手在技能调用上有很大的不同 并提出了德雷福斯模型 Dr
  • OpenStack中glance对接swift

    OpenStack中glance对接swift 一 环境介绍 二 查看数据库中glance相关信息 1 查询数据库glance用户密码 2 登录数据库 3 查询glance相关数据库 4 查询glance数据库表 5 查询image loc
  • HikariCP MBean (JMX) Monitoring and Management

    The JMX MBean for HikariCP exposes Idle Connection count Active Connections in use Total Connections The number of threa
  • 本地下载的软件包制作成本地repo源并使用apache发布

    背景 在前面的博客中 介绍了如何使用apt mirror同步远程的repo源 本文将介绍如何利用本地已经缓存的软件包制作成本地repo源 并对外提供源服务 应用目标 在应用中 有时候会遇到类似问题 远程的软件源太慢 而如果同步远程的软件源到
  • 国标GB28181协议视频平台EasyGBS内网访问正常,公网无法访问是什么原因?

    国标视频云服务平台EasyGBS可支持通过国标GB28181协议 接入多路视频源设备 实现视频流的接入 转码 处理与分发等功能 对外输出的视频流格式包括RTSP RTMP FLV HLS WebRTC等 平台视频能力丰富灵活 包括监控直播
  • XML中PCDATA与CDATA的区别

    XML中PCDATA与CDATA的区别 2011 02 10 19 27 25 分类 XML 标签 xml中pcdata与cdata的区别 字号 大中小 订阅 所有 XML 文档中的文本均会被解析器解析 只有 CDATA 区段 CDATA
  • C语言自定义类型详解(结构体 枚举 联合)

    目录 1 结构体类型 1 1声明 1 2结构的自引用 1 3结构体变量的定义和初始化 1 4结构体内存对齐 1 4 1结构体的对齐规则 1 4 2编译器的默认对齐数修改 1 5结构体传参 1 6结构体实现位段 位段的填充 可移植性 1 6
  • unity的asmdef报错GUID(这个报错记得重现一下,报错信息作为标题记录一下)

    这应该是unity给这个程序集分配的guid unity基于2020开发的科骏插件1 0 8 放到了2017 首先出现的这个报错 解决方法是将这个asmdef删除 asmdef简单来说是 库的描述信息文件 相关参考 初步理解Unity的as
  • SPI协议代码

    软件模拟SPI程序代码 文章目录 SPI协议简介 SPI接口介绍 SPI数据传输方向 SPI传输模式 通过两个单片机模拟SPI来加深理解 硬件连接方式 SPI模式 程序思路 主机C代码 波形 从机C代码 波形 概述 通过两个MCU STM3
  • Mybatis系列七:映射文件-自定义结果集

    一 案例1
  • 使用Clion进行Qt项目开发

    使用Clion进行Qt项目开发 创建项目并指定Qt CMake prefix path为Qt安装路径下的E Qt Qt5 9 1 5 9 1 mingw53 32 配置编译工具链 添加外部工具 找到Setting gt Tool gt Ex
  • 使用hexo和git实现多地更新和配置博客源文件

    使用hexo写博客的一个问题就是源文件都是在本地的 如果换了电脑需要更新博客时就会比较麻烦 目前 觉得比较靠谱的办法就是用github来管理了 主要的思路是 利用git分支实现 hexo生成的静态博客文件默认放在master分支上 hexo
  • 面向对象程序设计的基本概念

    原文链接 面向对象设计 类和对象 1 面向对象程序设计的基本概念 Java是一种面向对象的编程语言 面向对象编程 英文是Object Oriented Programming 简称OOP 那什么是面向对象编程 面向对象其实是现实世界模型的自
  • 计算机图形学【GAMES-101】1、矩阵变换原理Transform(旋转、位移、缩放、正交投影、透视投影)

    快速跳转 1 矩阵变换原理Transform 旋转 位移 缩放 正交投影 透视投影 2 光栅化 反走样 傅里叶变换 卷积 3 着色计算 深度缓存 着色模型 着色频率 4 纹理映射 重心坐标插值 透视投影矫正 双线性插值MipMap 环境光遮
  • 【从零开始学爬虫】采集京东商品信息

    l 采集网站 场景描述 采集京东电视分类中的所有商品信息 使用工具 前嗅ForeSpider数据采集系统 免费版本下载链接 http www forenose com view forespider view download html 入