基于ScrapySharp的孔夫子旧书网的图书价格信息抓取器的实现

来源 :科技信息·中旬刊 | 被引量 : 0次 | 上传用户:philiploo
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:ScapySharp由于有一个浏览器包装类和使用类似jQuery的Css选择器和Linq语法,使得它使用简单,更容易地被用以进行Html文档解析。本文介绍了一种基于ScrapySharp的孔夫子旧书网的图书价格信息抓取器及其实现的思路和关键技术。
  关键词:ScapySharp;孔夫子旧书网;图书价格;信息抓取
  一、引言
  采集电商网的商品价格信息,对于网店卖家进行同类商品的定价决策有重要的参考意义。笔者使用ScrapySharp实现了对孔夫子旧书网上的图书的价格信息进行抓取的软件,该软件功能可以用在电商系统后台等软件系统,为卖家的商品定价决策提供支持。
  二、软件功能描述
  卖家在孔夫子旧书网上架旧书商品的时候,需要确定旧书商品的价格,而价格的确定又需要参考同行的图书商品的定价。这种情况,一般的做法是通过图书的ISBN号在孔夫子旧书网上搜索图书的商品信息,然后查看各卖家对该书的定价,在参考同行定价的基础上,确定本店的定价。通过ISBN号在孔夫子旧书网上查询图书价格信息的方法如图1所示。这种查询图书定价信息的做法的最大缺点是,人力成本高,信息获取的效率低。
  为了节约人力成本,提高查询网店图书价格信息的效率,笔者实现了一种基于ScrapySharp的孔夫子旧书网价格信息抓取器,用户只需要输入图书的ISBN号,就可以查找到孔夫子网上的该书的所有定价信息,并把定价信息显示在用户界面。
  三、软件功能的实现
  1、软件功能实现的思路
  孔夫子旧书网的书籍价格信息抓取器的实现思路是,通过Url定位到图书查询的网页,然后对网页的内容进行抓取,最后从网页内容中把图书的价格信息提取出来。软件功能实现的思路(价格信息获取的流程)如图2所示。
  2、以ISBN查询图书信息的Url分析
  以ISBN为“9787560544588”的图书为例,该图书的中文书名为:概率、变量与过程(第4版);英文书名为:Probability,Random Variables and Stochastic Processes.在孔夫子旧书网的商品搜索框中输入“9787560544588”后,页面呈现搜索结果——《概率、变量与过程(第4版)》的商品信息列表,如图1所示。此时,浏览器地址栏中显示的网址为:http://search.kongfz.com/product/zk39k37k38k37k35k36k30k35k34k34k35k38k38/。
  再通过其它图书的ISBN搜索实验发现,搜索结果地址的结构分为三部分,第一部分为服务器(控制器)地址,即:http://search.kongfz.com/product/。第二部分為经过字符串混淆处理的ISBN号,即例子中的网址的“zk39k37k38k37k35k36k30k35k34k34k35k38k38”部分,该部分的结构为:“zk3”+ISBN号第1位+“k3”+ISBN号第2位++“k3”+ISBN号第3位+“k3”+ISBN号第4位+“k3”+ISBN号第5位+“k3”+ISBN号第6位+“k3”+ISBN号第7位+“k3”+ISBN号第8位++“k3”+ISBN号第9位+“k3”+ISBN号第10位+“k3”+ISBN号第11位+“k3”+ISBN号第12位+“k3”+ISBN号第13位。第三部分为搜索结果的分页页码,由“w+数字”构成,数字1表示搜索结果的第一页,2表示第二页,以此类推。本例子中,网址可以写成完整结构(包含服务器(控制器)地址、ISBN号信息和搜索结果分页页码三部分)的网址,即:
  http://search.kongfz.com/product/zk39k37k38k37k35k36k30k35k34k34k35k38k38w1/
  通过实验发现,当输入的分页页码数大于实际搜索结果的分页页码时,返回的网页中的title标签中的内容为“搜索零结果”,即:
  搜索零结果
  据此,可以准确判断搜索结果的分页页码数。
  3、ScrapySharp和Htlm文档解析
  通过网页搜索实验发现,图书价格信息在Html文档中的标签节点为:


  遍历文档中的class为“red”的p标签可以获取当前页中的所有图书价格信息。
  ScrapySharp为.Net开发者解析Html文档提供了极大的便利,主要优点有:ScapySharp有一个浏览器包装类(处理Reference,Cookie等),此外,它使用类似jQuery的Css选择器和Linq语法。通过ISBN号获取孔夫子旧书网中的图书价格信息的核心代码如下:
  public List GetKongfuziPriceByIsbn(string isbn)
  {
  try
  {
  //价格信息集合
  List priceStrList = new List();
  //搜索结果分页
  int page = 1;
  //读取所有分页的html文档信息
  while(true)
  {
  //使用WebClient处理从web站点检索的数据
  WebClient client = new WebClient();
  //获取搜索内容为isbn(图书ISBN号)的搜索结果网址
  string address = GetSearchUrl(isbn);   //获取流
  Stream st = client.OpenRead(address + “w” + page);
  //分页页码加1
  page++;
  //创建StreamReader 对象
  StreamReader sr = new StreamReader(st,Encoding.UTF8);
  //获取html文档内容
  string content = sr.ReadToEnd();
  //创建HtmlDocument对象
  var htmlDocument = new HtmlDocument();
  //载入html文档内容到HtmlDocument对象中
  htmlDocument.LoadHtml(content);
  //获取html文档的标签节点
  var html = htmlDocument.DocumentNode;
  //如果输入的分页页码超出实际搜索结果的分页页码的范伟,则退出循环
  if(html.CssSelect(“title”).FirstOrDefault().InnerHtml.Equals(“搜索零结果”))
  {
  break;
  }
  //获取class为red的p标签节点(即价格信息标签节点)
  var prices = html.CssSelect(“p.red”);
  //将价格信息保存到自定义的集合中
  foreach(var htmlNode in prices)
  {
  priceStrList.Add(htmlNode.InnerHtml);
  }
  }
  return priceStrList;
  }
  catch(Exception ex)
  {
  throw ex;
  }
  }
  4、效果測试
  在.Net控制台项目中对上述代码进行测试,测试实例为抓取ISBN号为“9787302423287”的图书的价格信息。测试程序的代码如下:
  //实例化孔夫子图书价格抓取辅助类的对象
  KongfuziPriceHelper helper = new KongfuziPriceHelper();
  //调用GetKongfuziPriceByIsbn方法抓取图书的价格信息
  List priceStrList = helper.GetKongfuziPriceByIsbn(“9787302423287”);
  //价格记录数
  int count = 0;
  //在控制台中输出所有价格
  foreach(var item in priceStrList)
  {
  count++;
  Console.WriteLine(item);
  }
  //在控制台中输出价格记录数
  Console.WriteLine(“总计:” + count + “条记录”);
  运行测试程序,控制台输出结果如图3所示。
  孔夫子旧书网上对ISBN号为“9787302423287”的图书进行搜索的结果如图4所示。
  由于搜索结果的显示页面过长,只截取页面局部,可以看到搜索结果的图书记录为78条,与测试结果一致。基于ScrapySharp的孔夫子旧书网的图书价格信息抓取器实现了预期的功能。
  四、总结
  ScrapySharp使用简单,使得.Net开发者更容易地解析Html文档,灵活地采集网页信息。应用此技术可以方便、高效地实现孔夫子旧书网的图书价格信息抓取器。测试结果表明,该软件的功能达到了预期效果。
  参考文献:
  [1]于娟,刘强.主题网络爬虫研究综述[J].计算机工程与科学,2015(02):231-237.
  [2]孙立伟,何国辉,吴礼发.网络爬虫技术的研究[J].电脑知识与技术,2010(15):4112-4115.
  [3]乔峰.基于模板化网络爬虫技术的Web网页信息抽取[M].电子科技大学,2015.
  [4]肖剑.垂直搜索中一种高效稳定的数据抓取方法的研究与实现[M].南京大学,2014.

其他文献
摘要:林业资源一直是经济发展中所需要消耗的资源,但是森林的开发和利用不能毫无章法,要具有一定的规范,只有将林木采伐运输管理工作做到规范化,才能实现对自然资源的合理利用,才能保证林业的可持续发展以及保证木材的正常生产和流通。只有在这两方面进行重点的研究和加强管理,才能更好的保护森林资源,才能有效的阻止乱砍乱伐现象,才能在保证林业可持续发展的前提下获得经济效益,进而推动社会发展。  关键词:林木采伐;
期刊
摘要:论文介绍了光栅尺的结构和测量原理,着重阐述了光栅尺辨向电路的设计。实践证明光栅尺具有精度高、速度快、工作可靠、便于安装和维护等优点,在运动控制系统中具有一定的应用价值。  关键词:光栅尺;辨向电路;运动控制  1、光栅尺的结构  光栅是利用光的反射、折射和干涉现象制成的一种光电检测装置,有物理光栅和计量光栅。物理光栅刻线较密,两刻线之间栅距在0.002mm~0.005mm之间,通常用于光谱分
期刊
摘要:目前在我国土地管理工作中其信息化建设属于其中较为重要的内容,只有加快土地管理信息化才能保证其相关工作可以适应现代社会发展的需求。在土地管理信息化中其必须要有基础设施、人才、制度等作为支持,以此来保证在土地管理中可以切实的实现电子政务的要求,但是以其现状来看,土地管理信息化的过程中仍然存有一些问题影响其实行效率,为此必须要针对这些问题的特点来采用相应的对策进行处理。  关键词:土地管理信息化;
期刊
摘要:森林资源在人类社会的生存与发展过程中占据相当重要的地位,因此必须实现对森林资源的有效保护。森林资源在实际建设与发展的过程中容易受到各种客观因素的影响,森林火灾就是其中之一,本文主要从火灾预测及预报技术、护林防火隔离技术以及森林火灾监测技术3个方面对当前主要的护林防火技术进行探究,这不仅可促使森林防火工作得以顺利开展,同时对森林资源可持续发展目标的实现有积极意义。  关键词:护林防火技术;森林
期刊
摘要:本文针对埕岛油田海底管道密集的现状,为破解“甄别高风险海底管道,强化科学运维管理”难题,针对海底管道面临的“第三方破坏与机械损伤、腐蚀与冲蚀、设计与工程建设、运行与管理、自然与地质灾害”等风险,根据海底管道的地质条件、使用年限、运行状况进行对海底管道逐条进行量化评分,按结果进行“风险分级”、比选排队,有针对性和分轻重缓急对海底管道进行检验检测、风险干预,科学优化隐患治理运行计划,实现海底管道
期刊
摘要:土地沙化以及水土流失现象普遍存在,因此我们必须在提高重视程度的基础上采取与之相对的措施。本文首先对我国当前营造林质量现状进行分析,然后提出相应的技术与管理对策,这不仅对营造林工作的顺利开展有促进作用,同时可从根本上实现对营造林质量的保障。  关键词:营造林;关键技术;管理对策  覆盖面积较广以及地势环境较为复杂是林业资源的显著特征,这也是导致林业自然资源难以实现有效保护的主要原因,自然灾害是
期刊
1 引言  1.1研究意义  根据教育部2013年的统计资料,全国普通高校已达2790所,教职工近230万人,在校学生超过3000万[1]。同时,据不完全统计,高校年能耗近3 000万tce(吨标准煤),高校学生的年均能耗远高于一般城镇居民能耗。高校作为电耗大户,照明用电量占总用电量的40%-50%以上[2]。  随着节能减排等基本国策的提出和高校绿色节能校园建设的开展,高校校园的照明质量与节能也
期刊
摘要:在我国目前信息化时代背景要求下,各项经济活动都离不开数据建模的技术支持。而目前常用的VBA编程数据库,尽管已较好提高了相关工作人员的工作效率,但由于数据庞大、内容繁复,其工作仍然有一定的不足。为更好帮助VBA编程的数据库建模进一步完善,笔者借助此文,提出了基于VBA编程的数据库建模自动化处理的技术。本文以舰船制造建模为例,从VBA编程自动化的需求分析入手,对自动化数据库建模的步骤进行一定的分
期刊
摘要:当前,随着信息化的发展,大数据技术的广泛应用,各类信息海量累积,各种数据交织关联,审计的对象、客体和载体都在发生深刻变化。本文主要探讨基层审计机关开展数据审计的模式,增强大数据背景下查错纠弊、监督服务的能力。  当前,随着信息化的发展,大数据技术的广泛应用,各类信息海量累积,各种数据交织关联,审计的对象、客体和载体都在发生深刻变化。审计面对的是被审计单位海量庞杂的数据,既包括最全面、最基层的
期刊
摘要:虽然我国现行法律都有对个人信息保护的规定,但仍然免不了会因为个人信息的泄漏而导致多种违法犯罪的发生和个人自身利益、生命的侵害,严重的影响了我国社会的稳定和人民的安全。尤其是拥有大量信息的公共管理领域,更应该把好工作质量关,严格管理和保密公民的个人信息。在此,文章通过分析了个人信息保护的法律基础,阐述了现实中公共管理领域对个人信息侵害的主要表现,以此为出发点,提出相关保护措施,为提高公共管理质
期刊