1.前言

本人是个学生党,在过两年就要研究生毕业了,面临着找工作,相信很多人也面临或者经历过工作,定居租房买房之类的

在此,我们来采集一下上海在售的二手房信息,有人想问,为啥不采集新房?快醒醒吧,新房可远观而不可亵玩焉,一般人都买不起,看的只会心情不好,hhhh

当然,二手房估计你也买不起!咱们拿数据说话!

2.观察网站结构

以本人所在的城市上海为例,走在上海的大街小巷,你会看到很多做房产中介的,最常见的就是链家了~

我们进一下链家的上海二手房页面:上海二手房|上海二手房出售|最新上海二手房信息 - 上海链家网链家二手房交易&utm_content=链家二手房&utm_campaign=品牌词

有81508套二手房源在出售,这么多!

3.寻找需要爬取信息

感觉这些红色框的我都想要,但是感觉还是不够全面,我们点击进去看看详细信息。

这里面的信息挺全的,当然,我根据需要的数据(可能之后分析需要用到)来选择爬取的数据

分析网页结构在我之前的文章里有写到,就不赘述了

传送门:

4.撰写爬虫

#主要程序

import requests

import re

from bs4 import BeautifulSoup

from fake_useragent import UserAgent

ua=UserAgent()#使用随机header,模拟人类

headers1={'User-Agent': 'ua.random'}#使用随机header,模拟人类

houseary=[]#建立空列表放房屋信息

domain='http://sh.lianjia.com'#为了之后拼接子域名爬取详细信息

for i in range(1,400):#爬取399页,想爬多少页直接修改替换掉400,不要超过总页数就好

res=requests.get('http://sh.lianjia.com/ershoufang/d'+str(i),headers=headers1)#爬取拼接域名

soup = BeautifulSoup(res.text,'html.parser')#使用html筛选器

#print(soup)

for j in range(0,29):#网站每页呈现30条数据,循环爬取

url1=soup.select('.prop-title a')[j]['href']#选中class=prop-title下的a标签里的第j个元素的href子域名内容

url=domain+url1#构造子域名

houseary.append(gethousedetail1(url,soup,j))#传入自编函数需要的参数

def gethousedetail1(url,soup,j):#定义函数,目标获得子域名里的房屋详细信息

info={}#构造字典,作为之后的返回内容

s=soup.select('.info-col a')[1+3*j]#通过传入的j获取所在区的内容

pat='(.*?)'#构造提取正则

info['所在区']=''.join(list(re.compile(pat).findall(str(s))))#使用join将提取的列表转为字符串

s1=soup.select('.info-col a')[0+3*j]#[0].text.strip()

pat1='(.*?)'

info['具体地点']=''.join(list(re.compile(pat1).findall(str(s1))))

s2=soup.select('.info-col a')[2+3*j]#[0].text.strip()

pat2='(.*?)'

info['位置']=''.join(list(re.compile(pat2).findall(str(s2))))

q=requests.get(url)#使用子域名

soup=BeautifulSoup(q.text,'html.parser')#提取子域名内容,即页面详细信息

for dd in soup.select('.content li'):#提取class=content标签下的li标签房屋信息

a=dd.get_text(strip=True)#推荐的去空格方法,比strip()好用

if ':' in a:#要有冒号的,用中文的冒号,因为网页中是中文

key,value=a.split(':')#根据冒号切分出键和值

info[key]=value

info['总价']=soup.select('.bold')[0].text.strip()#提取总价信息

return info#传回这一个页面的详细信息

写了详细注释,相信萌萌的你可以看懂~

我们来看一下爬的结果:

houseary#看一下列表信息

就是将每次爬取的信息做成dict依次添加在list中

接下来使用pandas神器~

import pandas#pandas大法好

df=pandas.DataFrame(houseary)

df

考虑到主程序写了双重for循环,函数里写了循环,所以时间复杂度是O(n^3),对于一个算法,一般是不可以接受的,好吧,萌萌的我只能接受,如果你问我为什么,我只能说,我写不出低复杂度的了。。。爬了这1w+条数据用了我1小时时间。。。各位dalao如果有方法可以指点一下,之后我想学习多线程提高爬取速度~

最后存到本地excel文件中

df.to_excel('house_lianjia.xlsx')

5.结语

看到这价格是不是有句mmp想说

之后会写一篇《Python数据采集和分析告诉你为何上海的二手房你都买不起!(二)》的数据分析和可视化的文章深入分析一下这次抓到的数据~敬请期待,么么哒

对爬虫有兴趣的小伙伴可以加我微信号:lezi10121643,记得加好友备注来自天善智能~

下次见~喜欢你就点个赞呗

======================================================================

大家也可以加小编微信:tszhihu (备注:Python),拉大家到 Python爱好者社区 微信群,可以跟各位老师互相交流。谢谢。

也可以关注微信公众号:Python爱好者社区 (ID:python_shequ)

上海python还是很多的_Python数据采集和分析告诉你为何上海的二手房你都买不起!(一)...相关推荐

  1. Python数据采集和分析告诉你为何上海的二手房你都买不起!

    观察网站结构 以本人所在的城市上海为例,走在上海的大街小巷,你会看到很多做房产中介的,最常见的就是链家了~ 我们进一下链家的上海二手房页面:http://sh.lianjia.com/ershoufa ...

  2. 基于Python的旅游景点的数据采集与分析的研究

    在旅游景点不断扩张,本基于Python的旅游景点的数据采集与分析系统按照软件开发方法进行研究,对系统先进行需求分析,确定系统必须做什么,进而进行系统设计,设计出满足需求的新系统,最后才是系统功能实现以 ...

  3. Python数据采集分析告诉你为何上海二手房你都买不起

    感谢关注Python爱好者社区公众号,在这里,我们会每天向您推送Python相关的文章实战干货. 来吧,一起Python. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数据领域感兴趣的 ...

  4. 小白学 Python 爬虫(26):为啥上海二手房你都买不起

    人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...

  5. 上海python招聘微信群_Python之微信-微信群发

    python之微信-微信群发 #!/usr/bin/env python # -*- coding:utf-8 -*- import json import requests from wxpy im ...

  6. python程序代码解析_Python源码分析3 – 词法分析器PyTokenizer

    Introduction 上次我们分析了Python中执行程序可分为5个步骤: Tokenizer进行词法分析,把源程序分解为Token Parser根据Token创建CST CST被转换为AST A ...

  7. python数据分析报告范文_Python数据实战分析之定量和定性数据分析

    数据分析中关于数据的部署 数据分析的最后一步--部署,旨在展示结果,也就是给出数据分析的结论.若应用场景为商业,部署过程将分析结果转换为对购买数据分析服务的客户有益的方案.若应用场景为科技领域,则将成 ...

  8. python 豆瓣评论数据分析_Python数据可视化分析--豆瓣电影Top250

    Python数据分析–豆瓣电影Top250 利用Python爬取豆瓣电影TOP250并进行数据分析,对于众多爬虫爱好者,应该并不陌生.很多人都会以此作为第一个练手的小项目.当然这也多亏了豆瓣的包容,没 ...

  9. python tus股票数据分析_python 股票量化分析(一)---基于Tushare平台的个股历史行情获取...

    在浩瀚如烟的股票中,如何将好股选择出来?长线.中线.短线个股如何筛选?国内外政治.经济.地缘博弈基本面对股市的影响有多大,怎样将其纳入股票选择买卖的决策因子?公司财报.未来规划.公司所处行业发展前景怎 ...

最新文章

  1. 牛客网NOIP赛前集训营-普及组(第一场)
  2. 《系统集成项目管理工程师》必背100个知识点-57沟通管理
  3. JavaScript调用其他函数中的变量
  4. YOLOv4重磅发布,五大改进,二十多项技巧实验,堪称最强目标检测万花筒
  5. java中qq中拉伸的文件,delphi中如何实现QQ中的截图并实现拉伸放大移动的功能
  6. 山东理工OJ【2121】数据结构实验之链表六:有序链表的建立(插排法)
  7. 02.改善深层神经网络:超参数调试、正则化以及优化 W3. 超参数调试、Batch Norm和程序框架
  8. Android之Bundle类
  9. JavaWeb之Cookie
  10. java 异常处理线程_转:Java子线程中的异常处理(通用)
  11. 怎么样把c语言和单片机融合,求助怎么把两个单片机c语言程序结合在一起?大一期末实验...
  12. linux shell awk -F‘:‘ ‘{print $1}‘
  13. 阶段3 3.SpringMVC·_06.异常处理及拦截器_7 SpringMVC拦截器之拦截器接口方法演示
  14. Java项目源码小微信程序第四期前台+后台相结合的水果商城系统
  15. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课...
  16. SourceInsight3.5---a valid serial number was not entered问题解决
  17. VMware ESXi Server 许可证注册方式
  18. 王者荣耀李白王昭君情侣头像故事: “风雨如晦,鸡鸣不已。既见君子,云胡不喜。”...
  19. C语言编写飞机大战程序,C语言实现简单飞机大战
  20. 用python的re库统计《斗破苍穹》词频

热门文章

  1. 跟着官方文档学DGL框架第七天——下载和处理数据集
  2. 控制工程实践(16)——电气工程上常用计算公式(1)
  3. 计算机网络技术与网络信息安全,计算机网络技术与网络安全精讲.ppt
  4. IDEA如何开始护眼模式
  5. Python新建文件夹的方法
  6. PMI-ACP敏捷认证:敏捷开发的6个实战经验
  7. 人工智能真正的意义?
  8. 我们到底在干什么? —— 一名普通程序员的心声
  9. python打印五子棋棋盘(简易)
  10. TEDxFlourcity Sean Bengry 自主学习的革命