发表于2021年3月19日12:34最后回复于2021年3月19日12:34

【从零开始学爬虫】采集当当网图书商品信息

884浏览量

0评论

采集网站

【场景描述】采集当当网计算机类中的图书信息。

【源网站介绍】当当(www.dangdang.com)是全球知名的综合性网上购物商城,由国内著名出版机构科文公司、美国老虎基金、美国IDG集团、卢森堡剑桥集团、亚洲创业投资基金(原名软银中国创业基金)共同投资成立,于美国时间2010128日在纽约证券交易所正式挂牌上市,成为中国第一家完全基于线上业务、在美国上市的B2C网上商城。

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

【入口网址】http://category.dangdang.com/cp01.54.00.00.00.00.html

采集内容

采集当当网中的计算机类中的图书信息,包括所属一级分类、二级分类、书名、简介、作者、出版社、出版时间、价格、编辑推荐、内容简介、作者简介、目录、页面网址等。


 

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

 

 

思路分析

配置思路概览:

 

 

配置步骤

1. 新建采集任务

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

 

选择列表链接,点击完成按钮,即创建任务完成。


 

 

 

2.获取分类链接

①采集预览,查看页面所有链接,查找计算机分类链接的规律,发现所有与计算机相关的分类的链接规律为:http://category.dangdang.com/cp01.54.+数字串+.00.00.00.html


②所以使用地址过滤的方法,过滤链接为以下规律的链接:http://category.dangdang.com/cp01.54.\d.00.00.00.html   

其中\d表示数字串,点击保存,重新测试,计算机分类链接就筛选出来了。


 

2. 抽取图书商品链接

①新建一层模板02,并新建两个链接抽取,第一个链接抽取抽取商品页链接,第二个抽取翻页链接。


可分别修改名称为:列表链接抽取和翻页链接抽取。

 


②选择任意一条分类链接,并粘贴到模板02的示例地址处,点击由上角保存按钮。


③双击内置浏览器空白处,内置浏览器显示该页面。


④采集预览,双击任意一条分类链接,进入图书商品列表页,查看页面链接,观察图书链接规律,发现图书商品链接规律为:

http://product.dangdang.com/+数字串+.html

⑤设置地址过滤,过滤规律为http://product.dangdang.com/\d.html\e的链接,其中\d表示数字串,\e表示链接结束。采集预览,图书商品链接已抽取到。


 

3.抽取翻页链接

采集预览,双击任意一条分类链接进入分类页,观察翻页链接,发现翻页链接中都含有:http://category.dangdang.com/pg,使用地址过滤方法,过滤地址中含有:http://category.dangdang.com/pg的链接。采集预览如下图所示:


 

4.抽取图书商品数据

①新建一个抽取模板,在其下新建一个数据抽取,具体操作如下所示:


②数据建表,按照下图所示建数据表。(注意字段属性等应严格按照下图进行设置)


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


 

 

④填写示例数据,采集预览,复制任意一条图书商品链接,


将链接粘贴到本模板示例地址中,并双击内置浏览器空白部分,加载本链接。


⑤关联模板

模板02中的列表链接抽取,关联模板03,这样采集到的图书商品链接会到模板03进行数据抽取。


模板02中的翻页链接抽取,关联模板02,这样采集到的翻页链接会继续在模板02中进行列表链接抽取。


⑥数据抽取-可视化抽取部分字段

Class1&class2使用字段定位取值的方法,进行取值,具体操作如下所示:


Title取值同上


IntroductAuthopublishpubtimeprice取值同上

⑦数据抽取—脚本抽取部分字段

Recommend后边的字段对应的数据不在页面源码中,所以用定位取值取不到。

接下来我们用浏览器打开该示例地址,查看recommend等字段对应的数据在哪个请求中。

点击F12,查看每个请求中返回的内容,发现recommend等内容在下图所示请求中。


发现该请求的链接是:

http://product.dangdang.com/index.php?r=callback%2Fdetail&productId=29267036&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.06.23.00.00

观察发现其规律为:

http://product.dangdang.com/index.php?r=callback%2Fdetail&productId=+id+&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.20.00.00.00";

查看请求中的返回内容,发现文本内容都被Unicode转译。


使用在线转码工具能够转译为中文。


 

在源码中,发现id为【abstract-all】的内容是编辑推荐(recommend字段)


 

同理,id为【content-all】的内容是内容简介(content字段)

id为【catalog-show-al】的内容是目录内容(booklist字段)

故在recommend字段创建脚本教程如下所示:


脚本文本如下所示:

var id=URL.urlname.Middle(".com\/",".html");	//从网址中拿到商品ID

var ur = "http://product.dangdang.com/index.php?r=callback%2Fdetail&productId="+id+"&templateType=publish&describeMap=01000031459%3A1&shopId=0&categoryPath=01.54.20.00.00.00";

 

var doc = EXTRACT.OpenDoc(CHANN,ur);	//通过第2行拼出的请求地址,打开请求(必须与CloseDoc成对使用)

var str = doc.GetDom().GetSource().ToStr();	//取请求正文->取正文源码->转换成字符串类型

 

jScript js;	//定义一个js变量,用于存储json文件

var json=js.RunJson(DOM.UnEscape(str,1));	//将已转换成字符串的请求正文,转换成json格式,并用UnEsCape()方法转码(从Unicode编码转化成GBK)

 

var html = OpenDom(json.data.html,ur, false);	//将json中包含着的HTML部分取出来,并转变为DOM树结构(必须与CloseDom成对使用)

var recommend=html.GetTextAll(html.FindId("abstract-all").next);	//从DOM树中找到该字段的节点,将内容取出来

 

REC.content = html.GetTextAll(html.FindId("content-all").next);	//由于当前打开的请求正文中,也包含了其他字段,为了节约效率,定义一个当前记录集对象,将其他字段一并取出

REC.author_info = html.GetTextAll(html.FindId("authorIntroduction-all").next);	//同上

REC.booklist = html.GetTextAll(html.FindId("catalog-show-all").next);	//同上

 

CloseDom(html);	//关闭一个由OpenDom打开的dom树

EXTRACT.CloseDoc(doc);	//关闭打开的采集文档

return recommend;


⑦采集预览,双击进入下一层,知道打开数据页,抽取到数据,表示配置成功。


 

 

采集步骤

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

①首先要建立采集数据表:

选择【数据建表】,点击【表单列表】中该模板的表单,在【关联数据表】中选择【创建】,表名称自定义,这里命名为【dangdang】(注意命名不能用数字和特殊符号),点击【确定】。创建完成,勾选数据表,并点击右上角保存按钮。

 

 

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


④采集结束后,可以在【数据浏览】中,选择数据表查看采集数据,并可以导出数据。



 

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


 

前嗅简介

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

私信

举报