马上要去杭州工作了,在西湖区,首先我得去找房子啊~
看了一下大家都推荐的豆瓣租房,我发现,豆瓣没有提供【根据你想找的地址筛选出合适的出租房源信息】的功能。
我打算找翠苑那一带的房子,离公司近,但是找起来非常麻烦,一页25条信息,你一条条看过去可能只能只有2条信息符合你的地点要求。
没办法,我就写了一个简单的爬虫。
我先将我想住的地址附近的关键字,如地铁站名,公路名,小区名等存起来【不知道去百度地图搜--附近的小区】,然后我去爬信息的标题,标题里一旦出现关键字,我就将这个url存下来,然后我自己可以一个个点进去看,看房子信息如何。
代码非常简单,我没有对爬虫做任何伪装,也没有开线程池,然后跑下来结果是这样的:
urllib2.HTTPError: HTTP Error 403: Forbidden
[Finished in 221.1s with exit code 1]
跑了快4分钟,豆瓣才封了我。
然后我看了下存下来的数据,有750条左右,这些数据远远超过了我会去看的数据量,我觉得够了。
另外,我存成了csv格式,这样方便统一管理,如添加房主的联系信息,免得加了房主微信然后发现自己不知道这个房主要出租哪套房。
# -*- coding: utf-8 -*-
import urllib2
from bs4 import BeautifulSoup
start=0
end=100
page_size=25
key_words=["翠苑","文一路","文二路","文三路","古翠路","嘉绿文苑","五联西苑","今日嘉园","古荡","支付宝大楼","沁雅花园"]
key_words.extend(["古荡湾新村","枫华府第","天苑花园","益乐新村","古荡新村","世纪新城","金色蓝庭","龙湖唐宁","康新花园","南都银座"])
key_words.extend(["嘉绿北苑","嘉绿青苑","景城花园","嘉绿南苑","嘉绿福苑","华门世家","嘉绿莲苑","古荡湾","中兴文都苑"])
key_words.extend(["华星公寓","通普大楼"])
href_start=18
href_end=63
title_start=72
out_file=open("/Users/gao/Codes/douban_room/result.csv","w+")
def crawl_douban_room():
for i in range(end):
url="https://www.douban.com/group/145219/discussion?start="+str(i*25)
req=urllib2.Request(url)
response=urllib2.urlopen(req).read()
soup=BeautifulSoup(response,"html5lib")
info=soup.select("table.olt tbody tr")
for child in info[1:]:
content=child.select("td.title a")[0].prettify().encode('utf-8')
href=content[href_start:href_end]
title_end=content.find('">')
title=content[title_start:title_end]
for key_word in key_words:
if title.find(key_word)!=-1:
print >> out_file, href,title
break
if __name__=="__main__":
crawl_douban_room()