感谢关注Python爱好者社区公众号,在这里,我们会每天向您推送Python相关的文章实战干货。
来吧,一起Python。
对商业智能BI、大数据分析挖掘、机器学习,python,R等数据领域感兴趣的同学加微信:tstoutiao,邀请你进入头条数据爱好者交流群,数据爱好者们都在这儿。
1.前言
本人是个学生党,在过两年就要研究生毕业了,面临着找工作,相信很多人也面临或者经历过工作,定居租房买房之类的
在此,我们来采集一下上海在售的二手房信息,有人想问,为啥不采集新房?快醒醒吧,新房可远观而不可亵玩焉,一般人都买不起,看的只会心情不好,hhhh
当然,二手房估计你也买不起!咱们拿数据说话!
2.观察网站结构
以本人所在的城市上海为例,走在上海的大街小巷,你会看到很多做房产中介的,最常见的就是链家了~
我们进一下链家的上海二手房页面
http://sh.lianjia.com/ershoufang/?utm_source=360&utm_medium=cpp&utm_term=链家二手房交易&utm_content=链家二手房&utm_campaign=品牌词
有81508套二手房源在出售,这么多!
3.寻找需要爬取信息
感觉这些红色框的我都想要,但是感觉还是不够全面,我们点击进去看看详细信息。
这里面的信息挺全的,当然,我根据需要的数据(可能之后分析需要用到)来选择爬取的数据
分析网页结构在我之前的文章里有写到,就不赘述了
传送门:
Python网络爬虫爬取智联招聘职位:https://ask.hellobi.com/blog/wangdawei/6710
爬取起点中文网月票榜前500名网络小说介绍:https://ask.hellobi.com/blog/wangdawei/7285
4.撰写爬虫#主要程序
importrequests
importre
frombs4importBeautifulSoup
fromfake_useragentimportUserAgent
ua=UserAgent()#使用随机header,模拟人类
headers1={'User-Agent':'ua.random'}#使用随机header,模拟人类
houseary=[]#建立空列表放房屋信息
domain='http://sh.lianjia.com'#为了之后拼接子域名爬取详细信息
foriinrange(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)
forjinrange(0,29):#网站每页呈现30条数据,循环爬取
url1=soup.select('.prop-titlea')[j]['href']#选中class=prop-title下的a标签里的第j个元素的href子域名内容
url=domain+url1#构造子域名
houseary.append(gethousedetail1(url,soup,j))#传入自编函数需要的参数defgethousedetail1(url,soup,j):#定义函数,目标获得子域名里的房屋详细信息
info={}#构造字典,作为之后的返回内容
s=soup.select('.info-cola')[1+3*j]#通过传入的j获取所在区的内容
pat='(.*?)'#构造提取正则
info['所在区']=''.join(list(re.compile(pat).findall(str(s))))#使用join将提取的列表转为字符串
s1=soup.select('.info-cola')[0+3*j]#[0].text.strip()
pat1='(.*?)'
info['具体地点']=''.join(list(re.compile(pat1).findall(str(s1))))
s2=soup.select('.info-cola')[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')#提取子域名内容,即页面详细信息
forddinsoup.select('.contentli'):#提取class=content标签下的li标签房屋信息
a=dd.get_text(strip=True)#推荐的去空格方法,比strip()好用
if':'ina:#要有冒号的,用中文的冒号,因为网页中是中文
key,value=a.split(':')#根据冒号切分出键和值
info[key]=value
info['总价']=soup.select('.bold')[0].text.strip()#提取总价信息
returninfo#传回这一个页面的详细信息
我们来看一下爬的结果:
houseary#看一下列表信息
就是将每次爬取的信息做成dict依次添加在list中
接下来使用pandas神器~
importpandas#pandas大法好df=pandas.DataFrame(houseary)df
考虑到主程序写了双重for循环,函数里写了循环,所以时间复杂度是O(n^3),对于一个算法,一般是不可以接受的,好吧,萌萌的我只能接受,如果你问我为什么,我只能说,我写不出低复杂度的了。。。爬了这1w+条数据用了我1小时时间。。。各位dalao如果有方法可以指点一下,之后我想学习多线程提高爬取速度~027yeshenghuowang.com
最后存到本地excel文件中
df.to_excel('house_lianjia.xlsx')
5.结语
看到这价格是不是有句mmp想说
之后会写一篇《Python数据采集分析告诉你为何上海二手房你都买不起!(二)》的数据分析和可视化的文章深入分析一下这次抓到的数据~敬请期待,么么哒

Python数据采集分析告诉你为何上海二手房你都买不起的更多相关文章

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

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

  2. 上海二手房8月排名:链家、悟空找房、中原、太平洋、我爱我家、易居、房天下、iwjw、房多多、房好多、q房网、、、

    房产网站总结 链家: 悟空找房: 中原: 太平洋: 我爱我家: 易居: 房天下: iwjw:有较多二手房信息 链家称王 房多多领跑电商平台 近日,云房数据公布了8月上海房产中介成交数据,从排行榜来看, ...

  3. Python股票分析系列——基础股票数据操作(二).p4

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第4部分.在本教程中,我们将基于Adj Close列创建烛台/ OHLC图,这将允许我介绍重新采 ...

  4. Python性能分析指南

    http://www.admin10000.com/document/2861.html 尽管并非每个你写的Python程序都需要严格的性能分析,但了解一下Python的生态系统中很多优秀的在你需要做 ...

  5. Python股票分析系列——自动获取标普500股票列表.p5

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第5部分.在本教程和接下来的几节中,我们将着手研究如何为更多公司提供大量的定价信息,以及如何一次 ...

  6. Python股票分析系列——基础股票数据操作(一).p3

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第3部分.在本教程中,我们将使用我们的股票数据进一步分解一些基本的数据操作和可视化.我们将要使用 ...

  7. Python股票分析系列——数据整理和绘制.p2

    该系列视频已经搬运至bilibili: 点击查看 欢迎来到Python for Finance教程系列的第2部分. 在本教程中,我们将利用我们的股票数据进一步分解一些基本的数据操作和可视化. 我们将要 ...

  8. Python股票分析系列——系列介绍和获取股票数据.p1

    本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...

  9. 【转】python模块分析之collections(六)

    [转]python模块分析之collections(六) collections是Python内建的一个集合模块,提供了许多有用的集合类. 系列文章 python模块分析之random(一) pyth ...

随机推荐

  1. python知识点及面试面试大集合

    题目来源:武sir--一个很有意思的人,点击这儿跳转 一.基础篇 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解 ...

  2. Git远程分支的回退

    下午发现上午提交的一个版本有问题,在回退本地分支后,发现还必须要回退远程分支的版本.网上查找到的资料如下: #新建old_master分支做备份 git branch old_master #push ...

  3. [2017BUAA软工助教]常见问题Q&A

    软工常见问题Q&A 目录: 1. 转会相关 1.1 转会流程是什么样子的? 1.2 团队中多人要求转会怎么办?(如何解散团队) 1.3 为什么有人想要转会? 1.4 软件工程课为什么有这一环节 ...

  4. semantic-ui 分段

    分段:用于创建一组相关联的内容. 1.创建一个基础的分段 在class中加一个segment的class即可 <div class="ui segment"> < ...

  5. apply和call方法

    真伪数组转换 /* apply和call方法的作用: 专门用于修改方法内部的this 格式: call(对象, 参数1, 参数2, ...); apply(对象, [数组]); */ function ...

  6. WebSocket推送

    本篇博客只是记录websocket在自己的项目中的应用,只是记录,不做说明(后来替换为GoEasy了). /** * 握手的设置,这其实是为了获取session */ public class Get ...

  7. Linux下面将windows写的脚本转换成 Linux 格式的文件

    1.接着上一篇blog 发现有一个问题 vim 打开文件 发现最下面有一行信息: 2. 里面有一些 不一样的地方. linux里面没法执行 ,如果想执行的话 可以输入命令 :set fileforma ...

  8. Latex常用

    插入罗马数字 \newcommand{\RNum}[1]{\uppercase\expandafter{\romannumeral #1\relax}} 然后在正文里面就可以用\RNum{}来添加罗马 ...

  9. centos6.5安装配置NTP,集群各机器间时间同步

    试验环境 提君博客原创 >>提君博客原创  http://www.cnblogs.com/tijun/  << IP 主机名 角色 描述 同步方式 192.168.11.11 ...

  10. mac下php开发环境的搭建

    1.phpstorm 在官网:https://www.jetbrains.com/phpstorm/,下载最新版:phpstorm-2016.2.1 在http://15.idea.lanyus.co ...