Py | 详细解读房价爬虫程序(上篇)

对于爬取数据,网上有很多零散的教程,正羊羊借最近自己的一个项目,针对广州房价来进行一次爬虫与数据分析。从最开始的数据爬取到之后的数据清洗与分析,正羊羊尽量将各个流程给大家讲清楚。本篇讲的是如何爬取数据并把数据保存到csv文件中。

温馨提示

建议在公众号“正羊羊部落”后台回复“房价”获取代码,在电脑上打开来对着看。另外,本程序尚未做效率优化处理,不要直接运行,建议在第79行代码的列表中只留下天河区,或者是在第86行代码中缩小爬取的页数范围再进行爬取。对本代码的进一步优化请看后续文章。

本篇文章的架构如下:

这个项目的目的是爬取某(lianjia)网中关于广州二手房的信息,包括房子的名称、特点、售价、位置等等。房子的位置范围是按照网站上区域的分类,包括天河、越秀、荔湾、海珠、番禺、白云、黄埔、从化、增城、花都、南沙这11个区,相应地,程序会生成11个csv文件,分别是各个地区的房价信息。

这个爬取数据的模块只需要几个常见的第三方库:

requests:访问网站,获取含所需数据的html文件

bs4(BeautifulSoup): 解析html文件,获取所需数据的文本

csv:将数据导入到csv文件中

time:控制网站的访问频率

random:配合time库设定频率

re:用正则表达式定位文本信息

获取html

网站(url)格式:https://gz.lianjia.com/ershoufang/{}/pg{}/,两个花括号分别为地区和页数,在程序中要设定候选的参量,比如,对于天河区网页的第一页,两个花括号分别替换成tianhe和1,即https://gz.lianjia.com/ershoufang/tianhe/pg1/。

整个爬取流程中,页数为100页,用列表来装着那11个地区的简拼:

将html.text用print函数打印结果如下:(只展示部分)

解析html

得到html.text后,就可以用BeautifulSoup来对其解析了。解析的意思就是从这些文本里提取出我们需要的信息。读者可以去看看文本中间部分的中文,那些就是我们要的信息:

为了方便,我们将BeautifulSoup简写成BS。BS给我们提供了CSS选择器,这个选择器的作用就是选取信息。我们在网页上把鼠标放在随便一个房子的名称上,右键点击“检查”或“审查元素”:

这样就可以打开监控台了,而且它还会将鼠标位置对应的信息定位到相应的代码上:

然后我们将鼠标放在上图的蓝色代码上,右键选择Copy目录下的“Copy selector”:

这样我们就把定位这个房名的css选择器的指引代码给复制了下来,在文本框中粘贴一下就可以看到了:

这个和代码第25行的字符串内容是不是很像,唯一不一样的就是li节点,我们copy下来的多了“:nth-child(1)”部分,这是因为,我们copy下来的,对应的是第一个房子的房名,而在程序里确实要这一整页的房名,所以,把这部分删掉就可以了。

通过.select语法,我们就可以利用经处理后copy下来的代码来选取信息了:

这几行依先后分别对应下图的这几处位置的信息:

另外,在这一部分还外加了简单的异常处理,try和except。如果其中某一个解析出现问题,程序会直接输出“failed!”的语句。

这部分程序最终会输出该网页各房在上图6个相应位置的节点信息。按照上图,程序里Titles、TotalPrice、UnitPrice、HouseInfo、buildings、attention分别得到如下文本:(这6个变量均为列表,包含该页每个房子相应位置的信息)

提取信息点

为了后续数据处理的方便以及信息本身的实用性,我们还需要对这些文本进行拆解,提取出最精炼的信息,而这也就是代码第37行到第71行的任务。虽然内容有点多,但是每一条信息的解析原理是相似甚至是一样的。

以房子的总价为例:

Tp是TotalPrice这个列表的某一个元素,代表着该网页中某一个房子的总价信息,用.get_text()方法来获取该信息的字符串格式,选择数字,去掉“万”字,这便于数据分析。去掉“万”字的方法是字符串特定序列的截取,字符串由前到后标号是0,1,2,...,而由后往前则是-1,-2,-3,...,代码中用[:-1]索引表示从字符串的倒数第2个字符一直往前,直到最前端。Strip()函数的作用很简单,只是为了去除字符串首尾的空格而已。

在解析HouseInfo这部分的文本时,我们可以看到网页上是用“|”符号将各个信息点划分开的,所以我们就用split()函数,按照“|”符号,将这条信息切割。

最终形成由各信息点组成的列表,每个位置的信息列表最终都会组合到results变量中,供下一步的数据存储。

数据存储

程序的第80行到第90行的任务就是数据存储,针对每一个地区(for p in place),都会打开一个相应的csv文件:

天河区的csv文件的内容示例如下:

我们可以看到,每一列的第一个元素是这一列的列名(看上图红框),而程序的第82行至84行就是设定这个列名,其中的函数均来自csv这个第三方库。

红色框中的两个循环头,就是依次表示了遍历每一个地区、每一页;而黄色框中的循环头,就是表示遍历爬取当前页的每一个房子的信息。因为results是包含该页的所有房子的信息,而我们可以看到。在上上图的csv文件截图中,每一行表示一个房子的信息,也就是说,程序每次会从results中取出一个房子的信息,再通过writerow(item)函数,把每个房子的信息写入csv文件中。

设置访问频率

最后,用time库和random库来设置爬取频率。

Time.sleep()表示程序到这里会停止一段时间,时间的长短由括号内的数值决定,这个数值由random库从0到3中随机生成一个值,也就是说,程序到这里可能会停顿0、1、2、3秒中的某一种可能。

在爬取数据的过程中,我们可以看到如下的进度示例:

最终的数据文件:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容