基于Python的租房数据爬取及数据分析

爬取+分析

  • 需求分析
  • 数据抓取
    • 流程图
    • 代码
  • 数据分析及可视化展示
  • 整合web可视化项目

需求分析

需要爬取各大城市的各个区域的租房信息,并作出相应的数据分析展示。
用户需要手动输入城市,如zz、wh

数据抓取

流程图

基于Python的租房数据爬取及数据分析_第1张图片

代码

import requests
import time
from lxml.etree import HTML, parse
from pymongo import MongoClient
import sys
import re
import random
import redis
import hashlib

# redis连接对象
r = redis.Redis("localhost", 6379, db=1)
"""
    1. 注意抓过的url不再抓取  --redis 队列存储url指纹
    2. 个别的异常数据,忽略,保证程序的健壮性
"""

def parse_content(content, col):
    """
        content, lxml.etree.HTML() 对象
        col, MongoDB集合
    """
    #解析当前页面数据 div块列表
    divs = content.xpath('//div[@class="content__list--item--main"]')
    #print(divs)
    
    cur_page_items = []
    #解析列表中的每一个房源div块
    for div in divs:
        try:
            trp = div.xpath(".//p[@class='content__list--item--title']/a/text()")[0].strip("\n").strip().split(" ")
            #标题部分经过空格划分后长度大部分都为3,其他的忽略,以提高程序的健壮性
            if len(trp) == 3:
                title, room_type, position = trp
            print(title, room_type, position)
            
            #详细位置
            detail_place = "-".join(div.xpath(".//p[@class='content__list--item--des']/a/text()"))
            print("detail place:", detail_place)

            #解析房源面积
            raw_square = div.xpath(".//p[@class='content__list--item--des']/text()")
            #print(raw_square)
            square = re.findall("(\d+\.\d+)", "".join(raw_square))[0]
            print("square:", square)

            #解析价格
            price = div.xpath(".//span[@class='content__list--item-price']/em/text()")[0]
            print("price:", price)
        except:
            continue

        #每平方的价格
        square_price = round(float(price) / float(square), 1)
        
        item = {
   
            "title": title,
            "room_type": room_type,
            "square": float(square),
            "position"

你可能感兴趣的:(爬虫,python,爬虫,数据分析,可视化)