经过之前的小练习,今天准备做一个相对较为复杂的小项目,最近看到一条新闻说深圳的房价断崖式下跌,平均每月均价下跌46块钱。。。所以准备尝试着抓取互联网上真实的卖房数据,通过大数据的分析,来帮想在深圳买房的小伙伴们,做一个辅助决策分析。
首先我们百度一下,top3的卖房网站(对百度的竞价排名持怀疑态度$_$)
经过筛选,我准备从链家,Q房网,房天下,三个网站抓取房地产售价数据
首先抓取链家的代码如下:
测试结果如下:
其次抓取Q房网基本代码如下:
最后房天下的抓取基本代码如下frombs4importBeautifulSoupimportrequestsimportcsv
在数据抓取完成后,对于数据存储到Mysql,Excel和MongoDB纠结中,百度和google后,准备把数据存入MongoDB这个Notonlysql的数据库,原因如下:
IfyourDBis3NFandyoudon'tdoanyjoints(you'rejustselectingabunchoftablesandputtingalltheobjectstogether,AKAwhatmostpeopledoinawebapp),MangoDBwouldprobablykickassforu
意思是,在没有复杂表关系的情况下,MongoDB会对于数据的存储非常棒,在MongoDB的官方使用手册,我们看到,MongoDB拥有很多优点,包括高性能,高扩展,高速查询,以及不需要严格的结构来存储组织数据。
当然MongoDB也有很多缺点,但是本文抓取的数据都是有结构的静态数据,可以直接存入数据库,不需要设计其他的表关系等。。
先安装一下MongoDB,:-)takingadeservedbreak!
之后我们导入了MongoDB可视化插件,然后带入pymongo这个包
在操作mongo的时候,目前要做的是先简单的把抓到的数据插入,代码如下:
tip:result是以字典的形式储存的
然后在每次对页面请求的时候,需要从这个ip池中随机一个ip,设置到requests的代理中:
defgetdata(page,ip_list):foriinrange(page):result=get_one_page(i,ip_list)store_in_db(result)print()ifi>=10andi%10==0:time.sleep(100)OK,先执行链家网的整体代码,拿到100页的数据,并储存在mongoDB中:
因为链家网的静态网页上只显示了100页的数据,也就是大概总共有3000条数据,接下来再用同样的方法,收集Q房网和房天下的页面数据。。
总结:
缺陷:在网络不稳定的时候,可能会有某个链接无响应,应该用一个集合去存储未响应的请求,然后重新发送给requests处理
下一篇会用这些数据来做数据分析,练习一下用python处理数据