目的任务:
目的任务 爬取租房网对应元素:
- 租房名
- 每月的价格
- 室内规格构造
- 房间大小
- 交通信息
- 保存数据到excel表格中
- 做数据清洗
- 数据可视化呈现
设计要求:
设计要求:
- 以类的方式书写,简洁明了。能够促进学生对于python程序的理解,和结构化的构造。提高代码的可读性和复用性。
- 利用selenium自动化程序进行爬取信息,便于体会pythoon代码简洁优雅的特点。
- 对excel中的数据进行美化和可视化报表,提高展示的友好性
代码演示:
我们将代码进行分段讲解,便于理解。
1.导包:
import time
import random
from selenium import webdriver #驱动浏览器
from selenium.webdriver.common.by import By #选择器,用于选择
from selenium.webdriver.common.keys import Keys #按键,起到鼠标点击的作用
from selenium.webdriver.support import expected_conditions as EC #等待所有标签加载完毕
from selenium.webdriver.support.wait import WebDriverWait #等待页面加载完毕,寻找某些元素
from openpyxl import workbook #插入excel模块
2. 创建excel的工作表:
#实例化一个excel对象
wb = workbook.Workbook()
#激活当前表
wt = wb.active
#设置表头,以列表形式传参
wt.append(["租房类型","租房名称","租房价格","交通环境","室内大小","室内构造"])
3.用类去书写:
class Spdier(object):
def __init__(self):
#启动浏览器
self.driver = webdriver.Chrome()
#起始地址
self.start_url = "https://bj.58.com/chuzu/"
def get_data(self):
#发出请求
self.driver.get(self.start_url)
time.sleep(2)
#租房名称和租房类型
house_names = self.driver.find_elements(By.XPATH,'//div[@class="des"]/h2/a')
#月租价格
house_prices = self.driver.find_elements(By.XPATH,'//div[@class="money"]/b')
#交通环境
house_traffics = self.driver.find_elements(By.XPATH,'//div[@class="des"]/p[@class="infor"]')
#房间大小和室内规格构造
house_areas = self.driver.find_elements(By.XPATH,'//div[@class="des"]/p[@class="room"]')
flag = 0
for house_name,house_price,house_traffic,house_area in zip(house_names,house_prices,house_traffics,house_areas):
house_name_text = house_name.text
#保存用的租房类型
t_house_type = house_name_text.split("|")[0]
try:
#保存用的租房名
t_house_name = house_name_text.split("|")[1]
except:
t_house_name = house_name_text
#保存用的租房价格
t_house_price = house_price.text
#保存用的交通环境
t_house_traffic = house_traffic.text
# 保存用的房间大小
house_area_text = house_area.text
t_house_area = house_area_text.split(" ")[-1]
#保存用的房间构造
t_house_consist = house_area_text.split(" ")[0]
#执行保存函数
self.save_data(t_house_type,t_house_name,t_house_price,t_house_traffic,t_house_area,t_house_consist)
def save_data(self,t_house_type,t_house_name,t_house_price,t_house_traffic,t_house_area,t_house_consist):
wt_list = [t_house_type,t_house_name,t_house_price,t_house_traffic,t_house_area,t_house_consist]
wt.append(wt_list)
wb.save("租房网情况.xlsx")
#翻页函数
def page_through(self):
for i in range(20):
self.get_data()
time.sleep(random.randint(2,4))
#点击翻页按钮
text_click =self.driver.find_element(By.XPATH,'//*[@id="pager_wrap"]/div/a[4]').click()
def run(self):
self.page_through()
if __name__ == '__main__':
zufang = Spdier()
zufang.run()
对excel表格进行相关处理:
原始数据:
信息非常杂乱,而且有很多脏数据和存在规律不整齐的问题。我们需要进行数据清洗,将数据尽可能的转化为数字。
几个关键快捷键:
- 1.ctrl +g定位
- 2.ctrl+h查找和替换
数据清洗之后:
运用方式:
1.冻结首项,保证下滑数据依旧可以看到数据表头
2.开始>>>条件格式,对表格进行美化
租房类型中1表示整租,0表示单间
对excel做了一点简单的操作是不是清楚多了?接下来就是数据透视表和可视化的操作了,我们请移步本文下册
tips:
若是想了解excel关于数据可视化的处理,可以关注一下,后面会详细更新excel对于数据可视化的使用