python 爬取链家二手房信息
1、网页分析(获取所有城市列表)
citys.py
''' Created on 2017-10-9@author: wbhuangzhiqiang ''' import csv import urllib.request from bs4 import BeautifulSoup url='https://www.lianjia.com' #获取html # 获取 html 页面 html = urllib.request.urlopen(url).read()# 获取 BeautifulSoup 对象,用 html5lib 解析(也可用 lxml 或其它方式解析,html5lib 容错性较好,所以此处选用 html5lib ) bsobj = BeautifulSoup(html, "html5lib") # 得到 class="cityList clear" 的 div 下所有 a 标签 city_tags = bsobj.find("div",{"class":"cityList clear"}).findChildren("a") print(city_tags)# 将每一条数据抽离,保存在 citys.csv 文件中 with open("./citys.csv", "w") as f:writ = csv.writer(f)for city_tag in city_tags:# 获取 <a> 标签的 href 链接city_url = city_tag.get("href")# 获取 <a> 标签的文字,如:天津city_name = city_tag.get_text()writ.writerow((city_name, city_url))print (city_name, city_url)
2、二手房信息
''' Created on 2017-10-9@author: wbhuangzhiqiang ''' import sys import re import csv import urllib.request from bs4 import BeautifulSoup# 成功打开页面时返回页面对象,否则打印错误信息,退出程序 def get_bsobj(url):page = urllib.request.urlopen(url)if page.getcode() == 200:html = page.read()bsobj = BeautifulSoup(html, "html5lib")return bsobjelse:print ("页面错误")sys.exit()def get_house_info_list(url):house_info_list = []bsobj = get_bsobj(url)if not bsobj:return None#获取页数global house_info_pagehouse_page = bsobj.find("a", {"gahref":"results_totalpage"})house_info_page=int(house_page.get_text())#print(house_info_page)house_list = bsobj.find_all("div", {"class":"info"})for house in house_list:#title = house.find("div", {"class": "prop-title"}).get_text().split("|")# 获取信息数据(例:加怡名城 | 2室1厅 | 62.48平米 | 西 | 精装),通过“|”符号分割字符串info = house.find("span", {"class": "info-col row1-text"}).get_text().split("|")#print("==========1====")info2 = house.find("span", {"class": "info-col row2-text"}).get_text().split("|")#print("==========2====") #print(info2)#print("==========2====") #print(info2)#print("==========2====") minor = house.find("span", {"class": "info-col price-item minor"}).get_text().strip()# 小区(例:加怡名城),strip()去除字符串两边的空格,encode,将字符串编码成 utf-8 格式block = info2[1].strip()+info2[2].strip()+info2[0].strip()if len(info2)>3:naidai = info2[3].strip()else:naidai='未知'#房型house_type =info[0].strip()#面积size =info[1].strip()price_sz = house.find("span", {"class": "total-price strong-num"}).get_text()price_dw = house.find("span", {"class": "unit"}).get_text()price =price_sz+price_dw#print(price) house_info_list.append({'房型':house_type,'面积':size,'价格':price,'房屋位置':block,'年代':naidai,'单价':minor})#print('**********************')#print(house_info_list)#print(len(house_info_list))return house_info_list # 读取前100个页面的房屋信息,将信息保存到 house.csv 文件中 def house_mess(url):house_info_list =[]get_house_info_list(url)if house_info_page>20:for i in range(0,21):new_url = url +'/d'+str(i)house_info_list.extend(get_house_info_list(new_url))#print(new_url)#print(house_info_list)#print("****************house_info_list*********************")#print(house_info_list)if house_info_list:# 将数据保存到 house.csv 文件中with open("./house.csv", "w",newline='') as f:# writer 对象writer = csv.writer(f)fieldnames=house_info_list[0].keys()writer.writerow(fieldnames)for house_info in house_info_list:#print('&&&&&&&&&&&&&&&&&&&&&&&')#print(house_info) writer.writerow(house_info.values()) #house_mess('http://sh.lianjia.com/ershoufang/minhang')
3、main.py
''' Created on 2017-10-9@author: wbhuangzhiqiang ''' #coding=gbk import csv import sys import urllib.request from bs4 import BeautifulSoup from house_info import house_mess def get_city_dict():city_dict = {}with open('./citys.csv', 'r') as f:reader =csv.reader(f)for city in reader:if len(city)>0:city_dict[city[0]] = city[1]return city_dict city_dict = get_city_dict() #print(city_dict) # 打印所有的城市名def get_district_dict(url):district_dict = {}html = urllib.request.urlopen(url).read()bsobj = BeautifulSoup(html, "html5lib")roles = bsobj.find("div", {"class":"level1"}).findChildren("a")for role in roles:# 对应区域的 urldistrict_url = role.get("href")# 对应区域的名称district_name = role.get_text()# 保存在字典中district_dict[district_name] = district_urlreturn district_dictdef run():city_dict = get_city_dict()for city in city_dict.keys():print(city,end=' ')print() key_city= input("请输入城市 ")# 根据用户输入的城市名,得到城市 urlcity_url = city_dict.get(key_city)# 根据用户输入的城市名,得到城市 urlif city_url:print (key_city, city_url)else:print( "输入错误")# 退出 sys.exit()ershoufang_city_url = city_url + "/ershoufang"print(ershoufang_city_url)district_dict = get_district_dict(ershoufang_city_url)# 打印区域名for district in district_dict.keys():print (district,end=' ')print()input_district = input("请输入地区:")district_url = district_dict.get(input_district)# 输入错误,退出程序if not district_url:print ("输入错误")sys.exit()# 如果都输入正确house_info_url = city_url + district_urlhouse_mess(house_info_url)if __name__ == "__main__":run()
4、以上海闵行为例,house.csv 爬取的内容为
结果表明,上海房价真的是高啊~~
转载于:https://www.cnblogs.com/HZQHZA/p/7648452.html
python 爬取链家二手房信息相关推荐
- python关于二手房的课程论文_基于python爬取链家二手房信息代码示例
基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...
- python爬取链家二手房信息
爬取过程分析: 1.链家网url:https://bj.lianjia.com/ershoufang/pg2/ 显示的二手房信息每个url递增一 2.访问时要加头信息,否则无法访问 3.用beauti ...
- 租房不入坑不进坑,Python爬取链家二手房的数据,提前了解租房信息
目录 前言 一.查找数据所在位置: 二.确定数据存放位置: 三.获取html数据: 四.解析html,提取有用数据: 前言 贫穷限制了我的想象,从大学进入到社会这么久,从刚开始的兴致勃勃,觉得钱有什么 ...
- python爬虫requests源码链家_python爬虫爬取链家二手房信息
#coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...
- python爬虫代码房-python爬虫爬取链家二手房信息
#coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...
- python二手房使用教程_python爬虫爬取链家二手房信息
#coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...
- Python 爬取链家二手房,我在北京买房的经历
本节所讲内容: 链家网站前期分析 利用requests爬取数据 爬取数据存储MongoDB(代码请看最后) 链家网站前期分析 今天我们主要对链家二手房数据爬取,看下我们目前的资金能买那一套.链家二手房 ...
- python爬取链家租房信息_Python爬取链家网上海市租房信息
使用Python进行上海市租房信息爬取,通过requests + Beautifulsoup对网页内容进行抓取和数据提取. import requests from bs4 import Beauti ...
- python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...
因为期末考试的缘故,本打算一个星期结束的爬虫,拖了很久,不过,也有好处:之前写的时候总是被反爬,这几天复习之余写了些反爬取的py code 下面发出来和大家探讨 做了些反爬取的手段 随机获取一个hea ...
- python链家二手房_python 爬取链家二手房信息
'''Created on 2017-10-9 @author: wbhuangzhiqiang''' importsysimportreimportcsvimporturllib.requestfr ...
最新文章
- [4月21日]《51CTO 编辑部的外传》——剧本篇(上)
- MySQL - 使用trace工具来窥探MySQL是如何选择执行计划的
- CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)
- Python3安装Scrapy爬虫框架
- Scala Case类和对象
- Unix 文件系统读写时权限校验
- 【渝粤题库】广东开放大学 应急管理 形成性考核
- Java集合源码解析之ArrayList
- 卖不动了,5G资费套餐再降价,网友:再等等再等等
- Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
- 计算机网络—无线局域网
- 模型算法_回归模型算法研究——ARMA模型
- #include stdafx.h
- 计算机毕业设计-网上购书系统【代码讲解+安装调试+文档指导】
- RainMeter学习4
- 视觉目标检测-05:使用目标区域的提取方法(手机iVcam与电脑iVcam之间相机的链接)
- 老照片还原当年穿着潇洒雷锋(组图)
- sdnu 1031 字母排序(拓扑排序的利用)
- 微信小程序图片404时显示默认图片
- matlab mag函数,频谱分析函数
热门文章
- 北京内推 | 百度增强现实技术部招聘虚拟人算法实习生
- linux查看其他用户计划任务,Linux计划任务(crond、atd)
- couchbase php,数据库大全-之-Couchbase
- Review board 和 Git 配合使用 一
- 怎么样把 swf格式 转换为flv格式
- el-table render-header 实现多级 表头
- 富士通Fujitsu DPK1786T 打印机驱动
- mysql安全补丁,Oracle发布了本季安全补丁,包含了mysql在内的高危漏洞补丁
- 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
- Chromium OS Developer Guide