![1910e0b14d52c2d7a357767541d144c2.png](https://i-blog.csdnimg.cn/blog_migrate/24d3b9fce5f5688195fffbe8c0ed3227.jpeg)
鸽了快2个月,先弄道小菜开胃吧。
接下去的几篇文章基本都会围绕爬虫或SQL展开,公众号SVG的研究会暂时搁置一段时间,热点扯淡节目随缘吧,最近信息有点过载,热点看得不多。
说回正题,如何爬取Airbnb的房源信息。
![b0c52476690c77ec08b503b7fc49a213.png](https://i-blog.csdnimg.cn/blog_migrate/d9aabf2e49726819ae996dbe08c2440a.jpeg)
首先我们选取深圳作为范例,可以看到它的网址都是有规律的,由3部分组成。第一部分是"https://www.airbnb.cn/s/深圳/homes?refinement_paths%5B%5D=%2Fhomes&query=深圳&map_toggle=false&s_tag=ezRV-goM§ion_offset=6&items_offset=";
第二部分是根据页面的不同而变化,相当于偏移量,第一页是0,第二页是18,第三页是36,依此类推;
“&s_tag=Z8CdDtog&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0”是第三部分。所以我们在爬取的时候,只要改变第二部分的数字就可以实现多页面的爬取。
![4a0c68a85ca30ba428d7d6f990632e1a.png](https://i-blog.csdnimg.cn/blog_migrate/8ac7255bae4e094ac4cc24e614c9cfed.jpeg)
接着,通过审查元素,看出每个房源信息都分类在类为“_14csrlku”的div中。继续展开可以看到标题在“div._qhtkbey”,评论数在“div._1245p0s2”,价格在“span._1dfubau0>span:last-child”,房屋类型在“div._v72lrv>a>div>div>div”。那就可以先通过“driver.find_elements_by_css_selector”找到页面的房源元素集,再利用for循环分离各项信息。
具体代码如下:
from selenium import webdriver
import time
fp=webdriver.FirefoxProfile()
#不显示图片,加快网页加载速度
fp.set_preference('permissions.default.image',2)
#记得先下载geckodriver.exe,放到anaconda的Scripts文件夹下
driver=webdriver.Firefox(firefox_profile=fp,executable_path=r'E:PythonanacondaScriptsgeckodriver.exe')
total_list=[]
#爬取17个页面
for i in range(0,17):
time.sleep(5)
link1='https://www.airbnb.cn/s/深圳/homes?refinement_paths%5B%5D=%2Fhomes&map_toggle=false&s_tag=ivYrxYTH§ion_offset=6&items_offset='
link2='&place_id=ChIJkVLh0Aj0AzQRyYCStw1V7v0'
url=link1+str(i*18)+link2
driver.get(url)
info=driver.find_elements_by_css_selector('div._14csrlku')
for eachinfo in info:
#标题#
name=eachinfo.find_element_by_css_selector('div._qhtkbey')
#评论数
comment=eachinfo.find_element_by_css_selector('div._1245p0s2')
#价格
price=eachinfo.find_element_by_css_selector('span._1dfubau0>span:last-child')
#房屋类型
type1=eachinfo.find_element_by_css_selector('div._v72lrv>a>div>div>div')
#集合列表
total_list.append([name.text,comment.text,price.text[4:],type1.text])
print(total_list)
driver.quit()
print('--------------------')
print('已采集完成')
既然都爬下来了,我们就简单做个分析。
![95a5727b24de964922c29c2b5d1c297f.png](https://i-blog.csdnimg.cn/blog_migrate/be80e61cd0a5c24a794c8f333165cadc.jpeg)
可以看到,短租区域基本分布在福田、罗湖、南山、龙华等交通枢纽较多的地区。或者更准确的说是活动、游玩景点更多更为繁华的地区。为什么这么说,让我们接着看下去。
![d5d00bab86075cb3903b85c1eae663d0.png](https://i-blog.csdnimg.cn/blog_migrate/0823ba617484177c2380a2bae3365c2c.jpeg)
从标题中提取出来各个地标出现的次数,会展中心、各个口岸、老街等景点出现的次数均在20次以上,这些地方都有同样的特点,就是人流量大。游客多,想必短租的需求也是挺旺盛的。
![d14ac9b9b5b299cf1f5f7835914c0dcb.png](https://i-blog.csdnimg.cn/blog_migrate/7204ba7a7310f1bbca0ec1e7ae6748e1.jpeg)
再从房间的供应量来看,单间的供应有257,占比95.53%。这个目前还看不出啥,需要对比正常租房的比例来看。
![774fda0cbbe43ea68543302ec35688e5.png](https://i-blog.csdnimg.cn/blog_migrate/87f42aebc587fff25c370c43ff0b8fde.jpeg)
还有一个比较奇怪的,就是卫生间为啥有0.5的小数位,难道是房东和租客共用,还是什么神奇的建筑学行业共识。