python豆瓣找房子

本文没有代码,只提供我的实现思路。

嗯,我知道已经很多人写过这样主题的文章了。

哎,我还是那句感慨,真是天下文章一大抄啊。爬来爬去都爬豆瓣,我要是阿北我会很郁闷。

用豆瓣租房的初衷是听闻豆瓣上中介比较少,找到房东的概率比较大,即便是合租遇到靠谱室友的概率比较大。

抱着这样天真的想法,我就用urllib去爬取豆瓣上的租房小组了。嗯,爬了几个后不出意料的ip被封了。

嗯,大家都说要模拟浏览器头,用代理池。好的,我去找了个爬取代理的爬虫去爬一些代理回来,然后用模拟好的浏览器头去访问豆瓣。挺好,能多坚持一会儿才被封了呢,卵用没有。通常来说不带cookies的访问若干次后就会被封,几百个ip也爬不到多少东西。

期间我也想过只爬取发帖的列表,这样很节约请求的次数。但是经过我对爬取回来的页面来看。豆瓣租房小组里的帖子大约只有十分之一是真实的个人发帖,其余的都是各种各样的中介广告。所以我的计划是把帖子的内容和发帖的作者一并爬取回来,然后对作者以及帖子的内容进行分析打分,从而筛除掉大部分的中介发帖,提高真实用户的发帖比例。如果要实现这个功能的话,就要访问帖子正文以及作者页面,这下可好,不但要请求正文,还要请求作者,请求数量直接翻一倍。免费的ip地址数量都不够塞牙缝的。

嗯,接下来就该使用cookies。原因有二:cookies在单位时间内(大约是一小时)几乎可以无限次的访问,其二,不登陆是不能访问作者页面的。自然,开始鼓捣urllib或者request带cookies访问吧。结果还是有缺陷,豆瓣大概有个周期检测,某个cookies访问量异常后会封号,需要手机短信解封,嗯,不嫌麻烦的话可以这样去爬取。本着不花一分钱的精神,我是舍不得一毛钱的短信的。何况多次被封后貌似就会永封了......

在此期间还试过获取多个cookies和ip排列组合访问,效果只能说是治标不治本,并且代码的逻辑写起来也谜之复杂。另外友情提醒,第一次,或者随机的,访问豆瓣会返回一段js来测试你是不是机器人,厉害了阿北~

在迷茫的百度和谷歌的时候,看到一些神文说研究出了cookies的规律,可以自己生成后访问,然后我就兴冲冲的去研究了。嗯,小有心得,但是我里大神还是有很大差距的,搞不定。

唉,说句题外话,网上找方案的时候,初级入门123性质的最多,实际有用的太少了。不过得夸一夸豆瓣的升级速度,在大家坚持不懈虐豆瓣的情况下,豆瓣的反爬虫真是丧心病狂~

最后我不得不使用selenium了。模拟浏览器登录,得知竟然不再继续支持phantomjs,意外意外,于是用chrome或者firefox吧,有头的无头的,linux的windows的,找包调试环境又是一阵折腾,真心是麻烦啊啊啊......各种版本问题,顺手还在stack overflow回答了个问题,处女答打成。然后就是研究selemiun带cookies访问了。

最终解决方案,selemiun+chrome_headless+cookies+windows环境访问,只要不丧心病狂的请求豆瓣,解决了我的需求。

接下来就是筛除中介的方案了。额外提一句,该方案可删除大部分中介,总是会有漏网的,自用我也不苛求了。

起初想搞文本分析,jieba分词后用svm学习,看看有什么模式没有,结果就是折腾了半天效果不好。原因有文本长度太不一致了,数据要筛选,不然没卵用。分门别类的话性价比不好,毕竟搞这么大的阵仗也没人给我发工资。所以就搞了些关键词打分过滤,作者就是通过名字的关键词过滤,关注的人呀,小组呀,看过的电影呀,判断是不是那种临时注册的。

然后觉得费这么大的搞出来的东西,只有我一个用户太浪费了,django做了个网页,网址是豆瓣租房无中介精选希望能帮到大家一点点吧。筛选条件放宽了些,所以依然有n多中介。然后想要不搞个公众号吧,十万粉后变现,分分钟财务自由,嗯,我还真是敢想敢做呢,真是佩服我自己。

最后,我在链家找到的房子