100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > BeautifulSoup爬取贝壳网成都二手房源信息(附:完整源代码)

BeautifulSoup爬取贝壳网成都二手房源信息(附:完整源代码)

时间:2020-11-30 15:24:05

相关推荐

BeautifulSoup爬取贝壳网成都二手房源信息(附:完整源代码)

BeautifulSoup爬取贝壳网成都二手房源信息

最近想出一套二手房,刚好在学习爬虫,那就顺手爬一下贝壳上成都各区二手房信息了解一下行情,本篇先介绍数据爬取,数据分析稍后有时间再写。仅用于技术交流,请勿商业应用,如有侵权,联系删除。

1.开发环境:

python 3.8.3;

bs4, pandas, requests;

存为csv, excel文件;

个人比较喜欢用bs4, 比较简洁,xpath也有优势,虽然路径稍复杂,但一步一步的往下找非常清晰。(效率方面暂时不做为重点考虑)

2. 最终获取表格展示

3. 爬取过程分析

访问成都二手房一级页面url:

/ershoufang/

分析一级页面可以看到每页有30套房源,房源列表在ul标签下面,class为 SellListContent。

然后获取每套房源详情页的url,可以看到url在li–>a–>href中,bs4直接获取即可。

def get_detail_url(page):"""获取每一页30套房源的详情url"""base_url = '/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 1. 获取贝壳网 成都市二手房信息2. 存为csv, excel文件@author: 进击的SB"""import requestsfrom bs4 import BeautifulSoupimport pandas as pdimport randomimport timedef get_detail_url(page):"""获取每一页30套房源的详情url"""base_url = '/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。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。