pytho爬取南京房源成交价信息并导入到excel

在这里插入图片描述
在这里插入图片描述

# encoding: utf-8
# File_name: 
import requests
from bs4 import BeautifulSoup
import xlrd #导入xlrd库
import pandas as pd
import openpyxl

# 定义函数来获取南京最新的二手房房子成交价
def get_nanjing_latest_second_hand_prices():
    cookies = {
        'select_city': '320100',
        'lianjia_ssid': '',
        '02eaefcc-d3ac-468d-a2d5-b1b816bc830f': '',
        'Qs_lvt_200116': '',
        'sajssdk_2015_cross_new_user': '',
        'sensorsdata2015jssdkcross': '',
        'Qs_pv_200116': '',
        # ... 其他cookie
    }

    # 设置请求头,模拟浏览器访问
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
        'Cookie': '; '.join(f'{name}={value}' for name, value in cookies.items()),
    }
    price_0_list = list()
    price_100_list = list()
    price_200_list = list()
    price_300_list = list()
    price_400_list = list()

    # 假设这是提供南京最新二手房成交价的网页URL
    for i in range(1,4):
        print(f'运行次数:{i}')
        url = f'https://nj.ke.com/chengjiao/pukouqita11/pg{i}ie2y4ba80ea130l2l3p3p4p5p6/'
        print('url:'+url)
        # 发送HTTP请求
        response = requests.get(url, headers=headers)

        # 检查请求是否成功
        if response.status_code == 200:
            # 使用BeautifulSoup解析HTML内容
            soup = BeautifulSoup(response.text, 'html.parser')

            # 根据实际的网页结构,找到包含二手房成交价的容器
            # 假设成交价的容器是一个带有特定class的元素
            price_container = soup.find('ul', class_='listContent')
            li_tags = price_container.find_all('li')
            print(''+str(i)+'该页多少房源:'+str(len(li_tags)))
            # 遍历li标签并输出内容
            for li in li_tags:
                # 二手房交易初始化
                house_dict = dict()
                houseInfo = li.findAll('div', class_='info')
                for infoDetail in houseInfo:
                    # 小区名称+户型+面积
                    title = infoDetail.find('div', class_='title')
                    a_tag = title.find('a', class_='CLICKDATA maidian-detail')
                    # 提取并输出<a>标签内的文本
                    if a_tag:
                        text_value = a_tag.string
                        tlist=text_value.split(" ")
                        house_dict['小区名称名称'] = tlist[0]
                        house_dict['户型'] = tlist[1]
                        house_dict['面积'] = tlist[2]
                        print('小区名称:'+tlist[0])
                        print('户型:'+tlist[1])
                        print('面积:'+tlist[2])
                    # address
                    # address = infoDetail.findAll('div', class_='address')
                    # for addressDetail in address:
                    #     pass
                    # 朝向,装修风格
                    fangxiang = infoDetail.find('div', class_='houseInfo')
                    house_dict['朝向,装修风格'] = fangxiang.text.strip()
                    print(fangxiang.text.strip())
                    deal_date = infoDetail.find('div', class_='dealDate')
                    house_dict['成交时间'] = deal_date.text.strip()
                    print(deal_date.text.strip())
                    total_price = infoDetail.find('div', class_='totalPrice')
                    if '暂无价格' not in total_price.text:
                        total_number = infoDetail.find('span', class_='number').text
                        print(f'{total_number}万')
                        house_dict['成交价格'] = total_number
                    else:
                        total_number = '0'
                        house_dict['成交价格'] = total_number
                        print(total_number)

                    # 楼层
                    louceng = infoDetail.find('div', class_='positionInfo').text.strip()
                    house_dict['楼层'] = louceng
                    print(louceng)
                    # 单价
                    unit_price = infoDetail.find('div', class_='unitPrice').text.strip()
                    if '暂无单价' not in unit_price:
                        unit_price = infoDetail.findAll('span', class_='number')[1].text.strip()
                    else:
                        unit_price = '0'
                    house_dict['单价'] = unit_price
                    print(unit_price)
                    # 房屋满几年
                    deal_house_year = infoDetail.find('span', class_='dealHouseTxt')
                    if deal_house_year is None:
                        deal_house_year = ''
                    else:
                        deal_house_year = deal_house_year.text.strip()
                    house_dict['房屋满几年'] = deal_house_year
                    print(deal_house_year)
                    # 挂牌时长
                    deal_cycle_txts = infoDetail.find('span', class_='dealCycleTxt')
                    cycle_txts_find_all = deal_cycle_txts.findAll('span')
                    if(len(cycle_txts_find_all)==2):
                        house_dict['挂牌价'] = cycle_txts_find_all[0].text.strip()
                        print(cycle_txts_find_all[0].text.strip())
                        house_dict['成交周期'] = cycle_txts_find_all[1].text.strip()
                        print(cycle_txts_find_all[1].text.strip())

                    else:
                        house_dict['挂牌价'] = ''
                        for cycle_txts_find_all_span in cycle_txts_find_all:
                            house_dict['成交周期'] = cycle_txts_find_all_span.text.strip()
                            print(cycle_txts_find_all_span.text.strip())

                    try:
                        unit_price_int = float(house_dict['成交价格'])
                        if (unit_price_int == 0):
                            price_0_list.append(house_dict)
                        if (0<unit_price_int <=100 ):
                            price_100_list.append(house_dict)
                        if (100<unit_price_int <=200 ):
                            price_200_list.append(house_dict)
                        if (200<unit_price_int <=300 ):
                            price_300_list.append(house_dict)
                        if (300<unit_price_int <=400 ):
                            price_400_list.append(house_dict)
                    except ValueError:
                        print("转换错误:字符串无法转换为整数")


    file = 'D:/house/pukou_pukouqita11.xlsx'  # 文件路径
    # 将列表字典转换为DataFrame
    df = pd.DataFrame(price_0_list)
    # 将数据写入不同的工作表中
    # 将每个DataFrame写入到对应名字的工作表
    with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:
        # 将DataFrame写入新的工作表
        df.to_excel(writer, sheet_name='无报价')

    # 将列表字典转换为DataFrame
    df = pd.DataFrame(price_100_list)
    # 将数据写入不同的工作表中
    # 将每个DataFrame写入到对应名字的工作表
    with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:
        # 将DataFrame写入新的工作表
        df.to_excel(writer, sheet_name='100w以内')

    # 将列表字典转换为DataFrame
    df = pd.DataFrame(price_200_list)
    # 将数据写入不同的工作表中
    # 将每个DataFrame写入到对应名字的工作表
    with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:
        # 将DataFrame写入新的工作表
        df.to_excel(writer, sheet_name='200w以内')

    # 将列表字典转换为DataFrame
    df = pd.DataFrame(price_300_list)
    # 将数据写入不同的工作表中
    # 将每个DataFrame写入到对应名字的工作表
    with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:
        # 将DataFrame写入新的工作表
        df.to_excel(writer, sheet_name='300w以内')

    # 将列表字典转换为DataFrame
    df = pd.DataFrame(price_400_list)
    # 将数据写入不同的工作表中
    # 将每个DataFrame写入到对应名字的工作表
    # 使用ExcelWriter追加模式打开文件
    with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:
        # 将DataFrame写入新的工作表
        df.to_excel(writer, sheet_name='400w以内')

# 调用函数并打印结果
latest_price = get_nanjing_latest_second_hand_prices()

初版:仍有很多需要优化的点,但是可以使用了,要注意,贝壳成交价的房源只展示100页,每页只有20个数据,所以大家在爬数据的数据要进行分区筛选,它里面的url 有很多规律(简直是无脑),如果没有发现可以通过私信或者直接评论。
效果图如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/583189.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言 | Leetcode C语言题解之第50题Pow(x,n)

题目&#xff1a; 题解&#xff1a; double myPow(double x, int n){if(n 0 || x 1){return 1;}if(n < 0){return 1/(x*myPow(x,-(n1)));}if(n % 2 0){return myPow(x*x,n/2);}else{return x*myPow(x*x,(n - 1)/2);} }

selenium 4.x入门篇(环境搭建、八大元素定位)

背景 Web自动化测现状 1. 属于 E2E 测试 2. 过去通过点点点 3. 好的测试&#xff0c;还需要记录、调试网页的细节 一、selenium4.x环境搭建 一键搭建 pip3 install webdriver-helper 安装后自动的完成&#xff1a; 1. 查看浏览器的版本号 2. 查询操作系统的类型…

68.网络游戏逆向分析与漏洞攻防-利用数据包构建角色信息-自动生成CPP函数解决数据更新的问题

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

0426GoodsBiddingAJAX项目

0426GoodsBiddingAJAX项目包-CSDN博客 数据库字段 ​ 管理员的登录界面 ​ 登录成功跳转在线拍卖界面&#xff0c;使用监听器拦截请求&#xff0c;只能登录管理员后访问该界面 ​ 商品竞拍列表 ​ 商品竞拍列表的竞拍操作&#xff1a; ​ 1 用户未登录跳转用户登录界面&#x…

(三十一)第 5 章 数组和广义表(稀疏矩阵的三元组行逻辑链接的顺序存储表示实现)

1. 背景说明 2. 示例代码 1)errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

算法03贪心与动态规划

算法03贪心与动态规划 1. 贪心与动态规划概述1.贪心1.1贪心概述1.2贪心常用场景1.3贪心解题思路 2.动态规划2.1动态规划概述2.2动态规划常用场景2.3动态规划解题模板 3.浅谈贪心与动态规划的关系 2.贪心经典题目区间问题 3.动态规划经典题目3.1体会“从整体到局部”的思考过程3…

2024Mac系统热门游戏排行榜 Mac支持的网络游戏有哪些?mac能玩哪些大型网游 苹果电脑Mac游戏资源推荐 Mac玩Windows游戏

“游戏是这个世界上唯一能和女性争夺男朋友的东西&#xff08;/滑稽&#xff0c;有不少女生也喜欢玩游戏&#xff09;。” 虽然只是一句玩笑话&#xff0c;不过也可以看出游戏对大多数男生来说是必不可少的一项娱乐活动了。而网络游戏是游戏中的一大分支&#xff0c;能让玩家们…

zabbix自动发现和自动注册

一、zabbix自动发现 1.1 确保客户端上的zabbix-agent2服务器状态正常 1.2 在web页面删除原有的客户端主机 1.3 在服务端和客户端上配置hosts 1.4 web端配置自动发现 二、zabbix自动注册 2.1 环境配置 2.2 修改zabbix-agent2配置文件 过滤非#或非&#xffe5;开头的内容 2.3 we…

基于遗传优化算法的TSP问题求解matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的TSP问题求解&#xff0c;分别对四个不同的城市坐标进行路径搜索。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....…

前端开发攻略---用原生JS在网页中也能实现语音识别

1、语音识别的过程 语音识别涉及三个过程&#xff1a;首先&#xff0c;需要设备的麦克风接收这段语音&#xff1b;其次&#xff0c;语音识别服务器会根据一系列语法 (基本上&#xff0c;语法是你希望在具体的应用中能够识别出来的词汇) 来检查这段语音&#xff1b;最后&#xf…

基于EBAZ4205矿板的图像处理:02生成测试彩条图像

基于EBAZ4205矿板的图像处理&#xff1a;02生成测试彩条图像 生成测试彩条图像可以有两种方式 VDMA缓存PS端生成彩条图像数据&#xff0c;PL端输出 这里可以直接看超级大电工开源的代码&#xff0c;写的很好详细&#xff0c;我就不再班门弄斧了&#xff08;下面是链接&#…

22 - Hadoop HA 高可用集群搭建、手动模式、自动模式以及HA模式集群

目录 1、HA 概述 2、HDFS-HA 集群搭建 2.1、HDFS-HA 核心问题 3、HDFS-HA 手动模式 3.1、环境准备 3.2、规划集群 3.3、配置 HDFS-HA 集群 3.4、启动 HDFS-HA 集群 4、HDFS-HA 自动模式 4.1、HDFS-HA 自动故障转移工作机制 4.2、HDFS-HA 自动故障转移的集群规划 4.…

AI助力后厨可视化智慧监管,让“舌尖安全”看得见

一、背景与需求分析 夏天是食物易腐败的季节&#xff0c;高温容易引发食品安全问题。在后厨环境中&#xff0c;食品安全问题可能涉及食品加工、后厨环境、食品是否被污染等方面&#xff0c;而不合格的食品安全管理可能导致食品中毒事件等风险&#xff0c;损害消费者的健康和餐…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

你的动漫AI女友 Anime gf :自定义创建各种独特个性、语言风格的虚拟角色

一个本地且开源的 CharacterAI 替代工具 Anime gf&#xff0c;提供了一个用户友好的界面&#xff0c;允许用户在桌面上与虚拟角色互动。你可以自定义创建各种角色&#xff0c;让每个虚拟角色都有自己的独特个性和语言风格&#xff0c;可以接入OpenAI、Anthropic、Mistral和 Tog…

建立外贸网站常用的WordPress插件

我们最近使用hostease的虚拟主机在创建wordpress外贸网站时&#xff0c;需要选择安装一些插件。对于wordpress建站选择合适的WordPress插件至关重要。面对琳琅满目的插件选择&#xff0c;根据多年的实践经验&#xff0c;我为您推荐以下必备插件清单&#xff0c;让您的网站建设更…

电商红利再现,“视频号小店”即将顶替“抖音小店”

哈喽~我是电商月月 电商行业发展迅速&#xff0c;除了“刚兴起”就入驻的商家&#xff0c;竞争少&#xff0c;市场大&#xff0c;能简简单单吃到第一批红利&#xff0c;后来入驻的商家就需要运用技巧与同行竞争了【要么认真选品&#xff0c;有独特的卖点。要么就是打价格战&am…

系统性文献综述的撰写(Systematic Review)

文献综述 什么是文献综述 对某一个“领域、专业、课题、问题、研究专题”&#xff0c;通过搜集大量的相关资料&#xff08;别人发表的论文&#xff09;&#xff0c;然后通过“阅读、分析、归纳、整理”给出最新进展、学术见解或建议。对其做出综合性介绍和阐述的一种学术论文…

基于SpringBoot和PostGIS的各省与地级市空间距离分析

目录 前言 一、PostGIS时空库 1、时空表设计 2、空间数据管理与查询 二、后台接口设计 1、ORM层设计与实现 2、业务层设计与实现 3、控制层设计 三、web可视化设计与实现 1、省份范围展示 2、城市距离可视化 3、成果展示 总结 前言 在上一篇博客中基于Java和GDAL实…

力扣HOT100 - 78. 子集

解题思路&#xff1a; class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> lists new ArrayList<>(); // 解集lists.add(new ArrayList<Integer>()); // 首先将空集加入解集中for(int i 0; i < n…