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 爬取链家二手房信息相关推荐

  1. python关于二手房的课程论文_基于python爬取链家二手房信息代码示例

    基本环境配置 python 3.6 pycharm requests parsel time 相关模块pip安装即可 确定目标网页数据 哦豁,这个价格..................看到都觉得脑阔 ...

  2. python爬取链家二手房信息

    爬取过程分析: 1.链家网url:https://bj.lianjia.com/ershoufang/pg2/ 显示的二手房信息每个url递增一 2.访问时要加头信息,否则无法访问 3.用beauti ...

  3. 租房不入坑不进坑,Python爬取链家二手房的数据,提前了解租房信息

    目录 前言 一.查找数据所在位置: 二.确定数据存放位置: 三.获取html数据: 四.解析html,提取有用数据: 前言 贫穷限制了我的想象,从大学进入到社会这么久,从刚开始的兴致勃勃,觉得钱有什么 ...

  4. python爬虫requests源码链家_python爬虫爬取链家二手房信息

    #coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...

  5. python爬虫代码房-python爬虫爬取链家二手房信息

    #coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...

  6. python二手房使用教程_python爬虫爬取链家二手房信息

    #coding=utf-8 import requests from fake_useragent import UserAgent from bs4 import BeautifulSoup imp ...

  7. Python 爬取链家二手房,我在北京买房的经历

    本节所讲内容: 链家网站前期分析 利用requests爬取数据 爬取数据存储MongoDB(代码请看最后) 链家网站前期分析 今天我们主要对链家二手房数据爬取,看下我们目前的资金能买那一套.链家二手房 ...

  8. python爬取链家租房信息_Python爬取链家网上海市租房信息

    使用Python进行上海市租房信息爬取,通过requests + Beautifulsoup对网页内容进行抓取和数据提取. import requests from bs4 import Beauti ...

  9. python爬取链家租房信息_python爬取链家租房之获取房屋的链接和页面的详细信息...

    因为期末考试的缘故,本打算一个星期结束的爬虫,拖了很久,不过,也有好处:之前写的时候总是被反爬,这几天复习之余写了些反爬取的py code 下面发出来和大家探讨 做了些反爬取的手段 随机获取一个hea ...

  10. python链家二手房_python 爬取链家二手房信息

    '''Created on 2017-10-9 @author: wbhuangzhiqiang''' importsysimportreimportcsvimporturllib.requestfr ...

最新文章

  1. [4月21日]《51CTO 编辑部的外传》——剧本篇(上)
  2. MySQL - 使用trace工具来窥探MySQL是如何选择执行计划的
  3. CUDA和cuDNN到底是啥关系?(cuDNN是基于CUDA的深度学习GPU加速库)
  4. Python3安装Scrapy爬虫框架
  5. Scala Case类和对象
  6. Unix 文件系统读写时权限校验
  7. 【渝粤题库】广东开放大学 应急管理 形成性考核
  8. Java集合源码解析之ArrayList
  9. 卖不动了,5G资费套餐再降价,网友:再等等再等等
  10. Android OpenSL ES 开发:Android OpenSL 录制 PCM 音频数据
  11. 计算机网络—无线局域网
  12. 模型算法_回归模型算法研究——ARMA模型
  13. #include stdafx.h
  14. 计算机毕业设计-网上购书系统【代码讲解+安装调试+文档指导】
  15. RainMeter学习4
  16. 视觉目标检测-05:使用目标区域的提取方法(手机iVcam与电脑iVcam之间相机的链接)
  17. 老照片还原当年穿着潇洒雷锋(组图)
  18. sdnu 1031 字母排序(拓扑排序的利用)
  19. 微信小程序图片404时显示默认图片
  20. matlab mag函数,频谱分析函数

热门文章

  1. 北京内推 | 百度增强现实技术部招聘虚拟人算法实习生
  2. linux查看其他用户计划任务,Linux计划任务(crond、atd)
  3. couchbase php,数据库大全-之-Couchbase
  4. Review board 和 Git 配合使用 一
  5. 怎么样把 swf格式 转换为flv格式
  6. el-table render-header 实现多级 表头
  7. 富士通Fujitsu DPK1786T 打印机驱动
  8. mysql安全补丁,Oracle发布了本季安全补丁,包含了mysql在内的高危漏洞补丁
  9. 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
  10. Chromium OS Developer Guide