闲鱼真是一个很神奇的地方,= =能让我等学生狗不用花很多钱就能体验科技的乐趣,当然,前提是别翻车。
好了,这当然是题外话,这阵子总结了自己学习的一些技能,就写一个对闲鱼的数据抓取来练练手。
预计达到的目标:第一步,将闲鱼上发布的商品信息爬取到本地。
第二步,实现关键词价格域提醒,比如设置想要找一个5000以下的IPHONE X,可爱的爬虫在闲鱼抓信息的时候,当发现匹配的商品的时候,就会给你疯狂打call,好吧,给你发邮件之类的。
首先,我们看一下闲鱼闲置商品的网址:
https://s.2.taobao.com/list/list.htm?spm=2007.1000337.0.0.6e0f2979exfsD7&oon=10&st_trust=1&ist=1
样子呢是这样的
可以看出来女装鞋子什么的占了很大一部分,= = 看来都是女装大佬。
好了,从哪入手呢,当然是从这么多的分类入手了。我们都可以很轻松的发现,每个分类的链接相似度很高,大家可以自己看看。
分类的不同主要是取决于URL的catid参数。
很明显,URL和分类名称形成了一中key-value的对应关系,在程序执行过程中我们可以将其存储在hashmap中
由于hashmap的特性,就算抓取算法有问题导致重复也不会产生很大影响。
我们查看一下网页的源码,
很容易发现<li>标签里保存的是链接和分类名信息。
获取网页源码后,(如果不知道怎么获取的话,请看我之前写的爬微博热搜的文章)
我们可以利用正则表达式来把需要的信息提取出来。
如下
public static HashMap<String, String> get_list(String text){HashMap<String, String> list=new HashMap<String,String>();//url,类别String rule="<a href=\"//s.2.taobao.com/list/list.htm\\?catid=(.*?)&oon=10&st_trust=1&ist=1\" title=\"(.*?)\">(.*?)</a>";Pattern pattern =Pattern.compile(rule);Matcher matcher = pattern.matcher(text); while (matcher.find()) { list.put("https://s.2.taobao.com/list/list.htm?catid="+matcher.group(1)+"&oon=10&st_trust=1&ist=1", matcher.group(3));} return list;}
这样就返回了一个hashmap,key是url,value是分类名。
这样我们需要爬取遍历的起点队列就很明确了,很大的简化了程序。
接下篇。