最近想出一套二手房,刚好在学习爬虫,那就顺手爬一下贝壳上成都各区二手房信息了解一下行情,本篇先介绍数据爬取,数据分析稍后有时间再写。仅用于技术交流,请勿商业应用,如有侵权,联系删除。
1. 开发环境:
python 3.8.3;
bs4, pandas, requests;
存为csv, excel文件;
个人比较喜欢用bs4, 比较简洁,xpath也有优势,虽然路径稍复杂,但一步一步的往下找非常清晰。(效率方面暂时不做为重点考虑)
2. 最终获取表格展示
3. 爬取过程分析
访问成都二手房一级页面url:
https://cd.ke.com/ershoufang/
分析一级页面可以看到每页有30套房源,房源列表在ul标签下面,class为 SellListContent。
然后获取每套房源详情页的url,可以看到url在li–>a–>href中,bs4直接获取即可。
def get_detail_url(page):"""获取每一页30套房源的详情url"""base_url = 'http://cd.ke.com/ershoufang/pg{}/'.format(page)headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60",}response = requests.get(url = base_url, headers = headers)# print(response.status_code)base_data = response.content.decode()soup = BeautifulSoup(base_data, 'lxml')house_lists = soup.find_all('li', attrs={'class':'clear'})url_lists=[]for house in house_lists:house_link = house.find('a')['href']# print(house_link)url_lists.append(house_link)# print(url_lists)return url_lists
进入详情页获取该房源的所有信息,包括基本信息,交易信息,小区简介等。
保存数据为csv和excel格式。
详细代码如下:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 27 16:53:04 20201. 获取贝壳网 成都市二手房信息
2. 存为csv, excel文件@author: 进击的SB
"""import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import timedef get_detail_url(page):"""获取每一页30套房源的详情url"""base_url = 'http://cd.ke.com/ershoufang/pg{}/'.format(page)headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60",}response = requests.get(url = base_url, headers = headers)# print(response.status_code)base_data = response.content.decode()soup = BeautifulSoup(base_data, 'lxml')house_lists = soup.find_all('li', attrs={'class':'clear'})url_lists=[]for house in house_lists:house_link = house.find('a')['href']# print(house_link)url_lists.append(house_link)# print(url_lists)return url_listsdef get_detail_info(detail_url):"""获取房屋详情页的信息,并存为List"""headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60",}response = requests.get(url = detail_url, headers = headers)# print(response.status_code)data = response.content.decode()soup = BeautifulSoup(data, 'lxml')data_lists = []# ***************获取二手房详细信息******************************************# 小区名称estate_name = soup.find('div', attrs={'class':'communityName'}).a.text# print(estate_name)data_lists.append(estate_name)# 房屋所在区域estate_areaName = soup.find('div', attrs={'class':'areaName'}).find('span',attrs={'class':'info'}).get_text('|', strip=True)# e = estate_areaName.find_all('a').text# print(estate_areaName)data_lists.append(estate_areaName)# 房屋总价totalPrice = soup.find('span', attrs={'class':'total'}).get_text(strip=True)# print(totalPrice)data_lists.append(totalPrice)# 房屋单价unitPrice = soup.find('span', attrs={'class':'unitPriceValue'}).get_text(strip=True)# print(unitPrice)data_lists.append(unitPrice)# 房屋贝壳编号house_id = soup.find('div', attrs={'class':'houseRecord'}).find('span',attrs={'class':'info'}).text[:12]# print(house_id)data_lists.append(house_id)# 获取房屋基本信息, 如:房屋户型 建筑面积 所在楼层 装修情况等house_base = soup.find('div', attrs={'class':'introContent'}).ul.get_text('|', strip=True)# print(house_base)data_lists.append(house_base)# 获取房屋交易信息,如:挂牌时间 交易权属 房屋用途 产权所有 抵押信息等house_transaction = soup.find('div', attrs={'class':'transaction'}).ul.get_text('|', strip=True)data_lists.append(house_transaction)# print(data_lists)# 获取小区简介,如:均价 建成年代 建筑类型 楼栋总数estateBrief = soup.find('div', attrs={'class':'xiaoqu_main fl'}).get_text('|',strip=True)# print(estateBrief)data_lists.append(estateBrief)return data_listsdef save_data(data):"""将list数据存到csv文件中"""df = pd.DataFrame(data,columns=['小区名称', '房屋所在区域', '房屋总价', '房屋单价', '房屋编号', '房屋基本信息', '房屋交易信息','小区简介'])print(df)df.to_csv('Cd_SecondHandHouse.csv', index=False, mode='a', encoding='gbk', header=False)def csv_to_excel():"""将csv文件转换为excel文件,并添加表头信息"""csv_to_excel = pd.read_csv('Cd_SecondHandHouse.csv', encoding='gbk', names=['小区名称', '房屋所在区域', '房屋总价(万元/套)', '房屋单价(元/平米)', '房屋编号', '房屋基本信息', '房屋交易信息','小区简介'])csv_to_excel.to_excel('Cd_SecondHandHouse.xlsx', sheet_name='Sheet1', index=False)def main(page):"""流程控制函数"""print('开始爬取成都二手房第{}页数据......'.format(page))get_detail_url(page)detail_urls = get_detail_url(page)for url in detail_urls:print('开始爬取详情页为{}的房屋信息......'.format(url))# 做适当延时,以免被认作恶意爬虫sleep_time = random.randint(1,5)print("主动休眠%d秒"%sleep_time)time.sleep(sleep_time)house_info = get_detail_info(detail_url=url)info_lists = []info_lists.append(house_info)save_data(info_lists)csv_to_excel()if __name__ == "__main__":for page in range(0, 10):main(page)
备注:写代码纯属个人爱好,专业提供投融资服务(种子轮,天使轮, IPO), 合规征信修复服务,VX: foxxjj。
PHP网站源码坂田企业网站建设南澳品牌网站设计南澳网络营销惠州网站搭建深圳如何制作网站同乐百度竞价吉祥百度竞价爱联模板制作南澳网站优化软件大浪网站建设设计大鹏百姓网标王推广爱联建站木棉湾企业网站制作坑梓高端网站设计惠州网络广告推广横岗标王龙岗网站改版同乐网站设计沙井百姓网标王坑梓阿里店铺托管福永品牌网站设计南山网站推广工具坑梓网站推广工具大芬优化双龙设计网站东莞优化松岗网页制作民治企业网站制作福田百度标王石岩营销型网站建设歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运