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()# 假设这是提供南京最新二手房成交价的网页URLfor 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.stringtlist=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').textprint(f'{total_number}万')house_dict['成交价格'] = total_numberelse:total_number = '0'house_dict['成交价格'] = total_numberprint(total_number)# 楼层louceng = infoDetail.find('div', class_='positionInfo').text.strip()house_dict['楼层'] = loucengprint(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_priceprint(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_yearprint(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'  # 文件路径# 将列表字典转换为DataFramedf = pd.DataFrame(price_0_list)# 将数据写入不同的工作表中# 将每个DataFrame写入到对应名字的工作表with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:# 将DataFrame写入新的工作表df.to_excel(writer, sheet_name='无报价')# 将列表字典转换为DataFramedf = pd.DataFrame(price_100_list)# 将数据写入不同的工作表中# 将每个DataFrame写入到对应名字的工作表with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:# 将DataFrame写入新的工作表df.to_excel(writer, sheet_name='100w以内')# 将列表字典转换为DataFramedf = pd.DataFrame(price_200_list)# 将数据写入不同的工作表中# 将每个DataFrame写入到对应名字的工作表with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:# 将DataFrame写入新的工作表df.to_excel(writer, sheet_name='200w以内')# 将列表字典转换为DataFramedf = pd.DataFrame(price_300_list)# 将数据写入不同的工作表中# 将每个DataFrame写入到对应名字的工作表with pd.ExcelWriter(file, mode='a', engine='openpyxl') as writer:# 将DataFrame写入新的工作表df.to_excel(writer, sheet_name='300w以内')# 将列表字典转换为DataFramedf = 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 有很多规律(简直是无脑),如果没有发现可以通过私信或者直接评论。
效果图如下
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

信息系统项目管理师——第5章信息系统工程(一)

近几期的考情来看&#xff0c;本章选择题稳定考4分&#xff0c;考案例的可能性有&#xff0c;需要重点学习。本章节专业知识点特别多。但是&#xff0c;只考课本原话&#xff0c;大家一定要把本章至少通读一遍&#xff0c;还要多刷题&#xff0c;巩固重点知识。 1 软件工程 软…

deepin 开源之夏重磅来袭!超优质项目已上线,欢迎来战

内容来源&#xff1a;deepin 社区 「开源之夏」是由中国科学院软件研究所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;培养和发掘更多优秀的开发者&#xff0c;促进优秀开源软件社区的蓬勃…

javamail发送qq邮箱失败案例分析

文章目录 javaMail报错:Unsupported or unrecognized SSL message原因分析: ssl与tls端口总结 javaMail报错:Unsupported or unrecognized SSL message c.n.m.service.impl.EmailServiceImpl : 邮件发送异常, Mail server connection failed; nested exception is javax.m…

Spring AI 来啦,快速上手

Spring AI Spring框架在软件开发领域&#xff0c;特别是在Java企业级应用中&#xff0c;一直扮演着举足轻重的角色。它以其强大的功能和灵活的架构&#xff0c;帮助开发者高效构建复杂的应用程序。而Spring Boot的推出&#xff0c;更是简化了新Spring应用的初始搭建和开发过程…

【分治算法】【Python实现】棋盘覆盖

文章目录 [toc]问题描述分治算法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;分治算法 学习指南&#xff1a;Python学习指南 问题描述 在一个 2 k 2 k 2^{k} \times 2^{k} 2k2k个方格组成的棋盘中&#xff0c;若恰有一个方格与其他方格不同&…

httpClient提交报文中文乱码

httpClient提交中文乱码&#xff0c;ContentType类型application/json 指定提交参数的编码即可 StringEntity se new StringEntity(paramBody.toJSONString(),"UTF-8");se.setContentType("application/json");context.httpPost.setHeader("Cookie&…

JUC并发-共享模型-无锁-乐观锁(非阻塞)

1、问题提出 有如下需求&#xff0c;保证 account.withdraw 取款方法的线程安全 public class TestAccount {public static void main(String[] args) {Account account new AccountCas(10000);Account.demo(account);} }class AccountUnsafe implements Account {private I…

2024LarkXR新增功能系列之五 | 单端口支持多并发

实时云渲染技术在为虚拟现实、游戏、和各种应用程序提供强大的渲染支持的同时&#xff0c;也带来了一些网络和运维上的挑战。在传统的设置中&#xff0c;实时云渲染推流技术需要为每个视频流单独占用服务器的一个端口。这种方法在多用户同时访问的情况下可能会导致端口资源的快…

MemFire解决方案-物联网数据平台解决方案

方案背景 随着各种通讯、传感技术发展&#xff0c;数据通讯成本的急剧下降&#xff0c;数以万亿计的智能设备&#xff08;智能手环、智能电表、智能手机、各种传感器设备等&#xff09;接入网络&#xff0c;并源源不断的产生海量的实时数据。这些海量数据的价值挖掘&#xff0…

Node私库Verdaccio使用记录,包的构建,推送和拉取

Node私库Verdaccio使用记录&#xff0c;包的构建&#xff0c;推送和拉取 Verdaccio是一个轻量级的私有npm代理注册中心&#xff0c;它可以帮助你在本地搭建一个npm仓库&#xff0c;非常适合企业内部使用。通过使用Verdaccio&#xff0c;你可以控制和缓存依赖包&#xff0c;提高…

边OTG边充电芯片LDR6500

随着科技的飞速发展&#xff0c;智能移动设备已成为我们生活中不可或缺的一部分。而在这些设备的连接与数据传输中&#xff0c;Type-C接口以其高效、便捷的特性逐渐占据了主导地位。OTG&#xff08;On-The-Go&#xff09;技术则进一步扩展了Type-C接口的功能&#xff0c;使得设…

构建安全高效的数字货币钱包:开发指南

在加密货币领域的蓬勃发展中&#xff0c;数字货币钱包成为了连接用户与区块链的重要桥梁。作为存储、发送和接收加密资产的工具&#xff0c;数字货币钱包的安全性和效率至关重要。本文将介绍如何构建一个安全高效的数字货币钱包&#xff0c;并提供开发指南&#xff0c;帮助开发…

2024中国(江西)国际先进陶瓷材料及智能装备博览会

2024中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会 “中国&#xff08;江西&#xff09;国际先进陶瓷材料及智能装备博览会” 陶瓷三新展 &#xff08;新材料、新装备、新技术&#xff09; 绿色智能、引领未来 2024年11月1日-11月3日 中国江西 南昌…

深度学习系列64:数字人wav2lip详解

1. 整体流程 第一步&#xff0c;加载视频/图片和音频/tts。用melspectrogram将wav文件拆分成mel_chunks。 第二步&#xff0c;调用face_detect模型&#xff0c;给出人脸检测结果&#xff08;可以改造成从文件中读取&#xff09;&#xff0c;包装成4个数组batch&#xff1a;img…

html显示PDF并兼容IE浏览器的解决方案

方案一、vue-pdf插件 缺点&#xff1a;IE11显示空白&#xff0c;编译后的Edge测试环境可以正常线上&#xff0c;打到线上报错&#xff0c;谷歌和百分浏览器显示完美 1、vue 只显示核心代码&#xff0c;需要安装vue-pdf插件 <vue-pdf :src"ivcPdfUrl"></v…

Spring声明式事务(@Transactional)原理之-ProxyTransactionManagementConfiguration

文章目录 目录 文章目录 前言 一、切入点以及切面的匹配规则 1.1 TransactionAttributeSourcePointcut事务的切入点匹配 二、TransactionInterceptor切面的具体逻辑 2.1 声明式事务实现的具体逻辑 总结 前言 上一篇文章已经说过了声明式事务的原理其实就是SpringAop动态…

C语言基础:初识指针(二)

当你不知道指针变量初始化什么时&#xff0c;可以初始化为空指针 int *pNULL; 我们看NULL的定义&#xff0c;可以看出NULL是0被强制转化为Void* 类型的0&#xff1b;实质还是个0&#xff1b; 如何避免野指针&#xff1a; 1. 指针初始化 2. 小心指针越界 3. 指针指向空间…

2024五一杯ABC题资料合集+代码+参考论文!!!

一.赛题思路 (赛题出来以后第一时间在群内分享) 二.比赛日期和时间 比赛开始时间:2024年5月1日(周三)10;00 比赛结束时间:2024年5月4日(周六&#xff09;12:00 三.将在明天分享的资料合集如下 4.我们这边会分享22年的题目完整全部的过程 5.数学建模的29个通用模型及MATLAB…

Python网络数据抓取(3):Beautiful Soup

Beautiful Soup 这个库通常被称为Beautiful Soup 4&#xff08;BS4&#xff09;。它主要用来从HTML或XML文件中抓取数据。此外&#xff0c;它也用于查询和修改HTML或XML文档中的数据。 现在&#xff0c;让我们来了解如何使用Beautiful Soup 4。我们将采用上一节中使用的HTML数据…

实验室温湿度设备巡检的意义

温湿度监控设备的正常运行对于实验室的科研工作来说至关重要&#xff0c;然而&#xff0c;我们常常会遇到设备出现故障或者探头不灵敏的情况&#xff0c;这给实验室的工作带来了诸多困扰&#xff0c;为了解决这些问题&#xff0c;对实验室温湿度设备进行巡检管理也是一种非常有…