因公司需求,为减少工作成本,需采集一些店铺的数据,并且需插入线上数据库。
HTML代码分析神器(HtmlAgilityPack),其次就是分析阿里巴巴的店铺数据规则。我这里的思路是,先在搜索栏根据关键词和地区,然后根据结果分析出店铺的URL。再根据店铺的URL进去店铺,找到“所有分类页”,解析所有类目,再根据类目URL获取该类目下的产品数据。找到产品URL后,进入到产品页面,解析需要的产品信息,这是我个人的采集思路。下面介绍下每个步骤需要重点注意的地方。
先上图
URL规则为:http://s.1688.com/company/company_search.htm?keywords={搜索关键词}&province={所在地区}&pageSize=30&sortType=pop&beginPage=1
keywords、province都为汉字,需采用GBK编码(阿里都是GBK编码),然后传入URL中,beginPage为页码,这里必须为1,如果手动修改此参数,将处罚阿里的安全验证。其实这一步就是难点,重点是如何去突破这个安全验证。开始采集的时候,是通过上面的URL把HTML源代码下载下来分析,但是到了第二页的时候每次都会出发阿里的安全验证,后面找了好多方法都无法突破,后来只能采用webBrowser去模拟点击,跳转到下一页。
突破阿里分页尝试过程(未使用webBrowser前):
1、从URL下手,无论怎么弄都会出发这个规则。
2、查看源码看看点击下一页发生了什么,这是你就会发现这么段HTML
翻页时会出发这么form,请中有两个验证参数,UA和TOKEN,这些加密字符是通过下面那个UA.JS动态生成的,跟BT的是UA这个参数中的字符会通过数据的操作(点击、移动等)动态修改(后面就没有怎么去研究这个东西了,直接换思路)。到这里才想到用到webBrowser去动态模拟数据移动,并且点击页面的下一页按钮。这就是上图为什么会出现一个webBrowser、模拟移动、模拟点击三个按钮了。
接下来讲下怎么去模拟鼠标的移动和点击,这里采用的是调用WINDOWS API,这里不清楚的可以去找找资料。
其实就是模拟操作,让那两个加密参数自动处理好之后,再模拟点击页面的下一页,这样就不会出现安全验证了。
完整的顺序是:先通过第一页URL,加载到webBrowser中,然后在webBrowser的DocumentCompleted(HTML文档全部加载完成)事件中,先用WINDOWS API调用模拟鼠标移动,这时那个验证参数就已经开始改变了,这里休眠500毫秒。然后再调用点击下一页的按钮,这样webBrowser里面会更新第二页数据,然后再拿出来分析,剩下的就是重复上面的工作了。
需要说明下两个按钮都需要要有自己的事件,还有就是采集的时候,鼠标不能自己去移动。
好了,到这里你已经拿到公司的URL了,接下来就是分析每个店铺,获取产品数据了。
这里就没有什么安全验证了,我就没有采用webBrowser,而是直接通过URL下载HTML代码字符分析,如果采集频繁的话,可以动态设置代理。阿里的店铺URL都是非常规则的http://{用户名}.1688.com/,您可以获取到这个用户名,这是唯一的标识,后面可以通过这个来判断该店铺是否已经采集。
过程:
1、通过店铺首页URL分析得出“公司档案”页面,规则为http://{用户名}.1688.com/page/creditdetail.htm,这里可以得到公司的一些基本信息(公司名称、联系人、电话、手机、地址、简介等)。
2、解析类目信息,规则为http://{用户名}.1688.com/page/offerlist.htm,这里只需要拿到该店铺所有类目ULR,提供下XPATH(//div[@class='wp-category-nav-unit']/ul/li)。
3、分析类目编号,再第二步的基础上,通过URL拿到类目编号,规则为offerlist_{类目编号}.htm,这里说下,有些店铺的类目是有两级到三级的,我这里只统一取第一级。
4、获取分下的产品数据,规则http://{用户名}.1688.com/page/offerlist_{类目编号}.htm?pageNum={页码},拿出HTML分析就好了,提供下XPATH(页码的://em[@class='page-count']没有找到就只有一页;产品的://ul[@class='offer-list-row']/li),产品URL图。
5、获取产品详情,规则http://detail.1688.com/offer/{产品编号}.html,通过上图解析的URL,获得产品编号,由此来判断是否已经采集过该商品。接下来就是通过HTML去分析您需要的东西了。这里只有一个需要注意的地方,就是产品描述是通过AJAX动态加载的。
找到data-tfs-url,然后下面里面的内容就是产品描述了。
最后就是入库了,把采集的字段和您的数据库字段对应就OK了。
好了,所有步骤的已经讲解完成了,如果思路还不错,请各位看官点个“推荐”喔!!!