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

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

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。

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

  1. Python爬取链家成都二手房源信息

    作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...

  2. Python爬取链家成都二手房源信息,异步爬虫实战项目!

    本文先熟悉并发与并行.阻塞与非阻塞.同步与异步.多线程.多线程.协程的基本概念.再实现asyncio + aiohttp爬取链家成都二手房源信息的异步爬虫,爬取效率与多线程版进行简单测试和比较. 1. ...

  3. python 爬取贝壳网小区名称_Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  4. Python爬虫实战:爬取贝壳网二手房40000条数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于啤酒就辣条 ,作者啤酒就辣条 一.网页分析 爬取贝壳网石家庄二 ...

  5. python爬取当当网的书籍信息并保存到csv文件

    python爬取当当网的书籍信息并保存到csv文件 依赖的库: requests #用来获取页面内容 BeautifulSoup #opython3不能安装BeautifulSoup,但可以安装Bea ...

  6. python爬虫爬取当当网的商品信息

    python爬虫爬取当当网的商品信息 一.环境搭建 二.简介 三.当当网网页分析 1.分析网页的url规律 2.解析网页html页面 书籍商品html页面解析 其他商品html页面解析 四.代码实现 ...

  7. BeautifulSoup爬取国家政策网目标话题的10篇文章,以及基于jieba的关键字生成

    BeautifulSoup爬取国家政策网目标话题的10篇文章,以及基于jieba的关键字生成 引用链接1 引用链接2 一:基本步骤 1.首先,写出需要访问的url,涉及到将中文转化为utf8编码,再转 ...

  8. Scrapy爬取当当网的商品信息存到MySQL数据库

    Scrapy爬取当当网的商品信息存到MySQL数据库 Scrapy 是一款十分强大的爬虫框架,能够快速简单地爬取网页,存到你想要的位置.经过两天的摸索,终于搞定了一个小任务,将当当网的商品信息爬下来存 ...

  9. python抓取文献关键信息,python爬虫——使用selenium爬取知网文献相关信息

    python爬虫--使用selenium爬取知网文献相关信息 写在前面: 本文章限于交流讨论,请不要使用文章的代码去攻击别人的服务器 如侵权联系作者删除 文中的错误已经修改过来了,谢谢各位爬友指出错误 ...

最新文章

  1. java如何做到判断一个字符串是否是数字
  2. java hashmap 缓存
  3. Unity3D 游戏引擎之平面小球重力感应详解【转】
  4. python输出重定向到窗口_[python]重定向输出
  5. 天体运行轨迹_数字的天体运行轨迹l 周运势能量11.2512.1
  6. 5门可能衰落的编程语言
  7. mysql 远程登陆设置_MYSQL远程登录权限设置
  8. “李国庆午餐1小时”12.94万成交!同时对家暴非常自责
  9. php数据库显示+ajax,如何使用PHP和AJAX显示MySQL数据库
  10. WinForm的延时加载控件概述
  11. [转载]SELinux安全系统基础
  12. hashmap8底层源码剖析1--构造以及put
  13. html滚动字幕制作教程,dreamweaver教程:怎么制作网页滚动字幕
  14. 营销单页程序php,Z-blogPHP单页网站模板|产品营销单页|单品推广
  15. 近几十年基础科学的停滞影响研究
  16. 独立开发仿造一个智能窗帘机器人
  17. Acer传奇Go电脑开机几分钟就会蓝屏怎么重装系统?
  18. PHP开发的93手赚网手机赚钱任务平台源码
  19. 怎么把英文翻译成中文?手机中英翻译的简单方法
  20. python画柱形图显示数值_python画柱状图--不同颜色并显示数值的方法

热门文章

  1. WIN7下PS/2等键盘失灵无法使用的解决办法--实测有效
  2. 微信支付分727属于什么水平
  3. Python学生信息管理系统图形化界面-老师端-学生端项目实现
  4. 小学计算机设备管理 维护制度,信息化各种设备使用、管理及维护制度
  5. 21天精通python电子版_小白21天精通Python是如何做到的?
  6. 从0到1搭建一个Spring Boot项目【第一个接口】
  7. 关于mybatis的报错 attempted to return null from a method with a primitive return type (int)
  8. mybatis异常Mapper method attempted to return null from a method with a primitive re
  9. 中国余数定理练习题及规律总结,超强总结
  10. 文献管理软件Mendeley Reference Manager使用方法