用python爬取链家网的二手房信息

题外话:这几天用python做题,算是有头有尾地完成了。这两天会抽空把我的思路和方法,还有代码贴出来,供python的初学者参考。我python的实战经历不多,所以代码也是简单易懂的那种。当然过程中还是遇到了一些问题,也会向大家提供我的解决方案。

用python爬取链家网的二手房信息,我主要用到了bs4中的BeautifulSoup。所以首先我们需要在cmd中输入“pip install beautifulsoup”安装——pip的安装自己搜博客哦。另外我还推荐使用Anaconda2(64位),遇到需要自己设路径的安装库时,可以直接在这个软件内安装你需要的库类。这两种方法比较简单方便。

一、import导入库

from bs4 import BeautifulSoup

import urllib2

import time

第一个库是用来从HTML中提取数据(HTML/XML的解析器);第二个库是需要其中的urlopen,用来打开url;第三个库是用来延时的,以防访问过快被封IP。

二、准备工作

time.clock()

address = []

flood = []

follow = []

price = []

为程序加入计时器;还有四个空列表,用来放从网页上提取得到的相关信息。adress是房源地址信息;flood是房子的样式;follow是有多少人关注;price是房价。

三、解析网址

假设我们需要爬去杭州萧山区的二手房信息,我们看到一共有二十五页,而每页的网址知识改变了最后的“/pg2”里的数字页码。我们可以这样做:

for i in range(1,26):

url = 'https://hz.lianjia.com/ershoufang/xiaoshan/pg'+str(i)+'/'

page = urllib2.urlopen(url)

soup = BeautifulSoup(page)

在for循环中,我们用range(1,26),从第一页至第二十五页,注意range的范围是左闭右合;然后用urllib2.urlopen(url)打开网址,创建beautifulsoup对象。

同样在这个大for循环下,加入下面的代码:

for link in soup.find_all('div','address'):

context = link.get_text()

address.append(context)

# for i in address:

#    print address[0]

以前做的时候使用soup.select做的,这次发现用find_all更简单。我们找到div标签下,样式是address的信息;然后用get_text去掉其中的代码部分,选取文本信息;再将文本信息添加至address列表中。

这里需要用到网页的相关知识,我简单介绍一下:网页由HTML(网页结构)、CSS(网页样式)和JavaScript(网页功能)构成。在网页中,我们在某个网页标签(比如将鼠标放在“一室一厅”上)上右击选择“检查”,就可以定位到这个文本在网页代码中的位置。

在下图中,我们可以看到选中右边的title时,左边的黑色圈出来部分被阴影提示。在这里我们会发现我们所需要的文本信息都是放在<div>……</div>区域内的;并在“class=样式”下进行内容填充。

网页解析

由此,我们将大for循环写完整,如下:

大for循环下的全部内容

这里我突然发现我的延时并没有用上…写得太匆忙了…只是起到了一个计数的作用。最后那个“print '当前正在抓取第'+str(i)+'页'”是为了方便跑程序的时候看进度,不然未知的等待很浪费时间。

这里之后我还会学习一下用Xpath和正则表达式来做,毕竟是python必学内容。

四、构建数据表,进行信息整合

需要把以上四个房源信息合并到一个数据表中。

用pandas创建数据表

因为得到的每列数据中含有多种讯息,所以我们需要将其进行分列操作。

数据分列操作

这里我觉得代码还是比较容易读的;着重说一下上图中圈出来的红色。如果不加会报错“…6 columns,passed…7columns…”,大概是这样。看报错后的定位大概可以了解到,是因为依据“|”进行分列,可以分为7列,但我只给了六个分列后的标签,所以报错了。

分析最后得到的数据表,也不难发现是因为某些区内的某些别墅类房源的多标签导致的。

最后我们再将这些分列好的数据进行整表:

分列信息进行整表

由于我是做题需要,太多标签行对我来说没有什么意义,所以除了删除未分列前的行,我还删除了有无电梯等列信息。house.drop()里的axis的值可选0或1,表示行或列。

五、保存爬取结果

这样,我们的网页爬取就结束了。接下来是保存成csv结构;建议数据操作时还是以表格形式处理(如果是用excel处理的话),不然保存后只会留下最后一张表…还好我是一边做一边截图放文档里的。

保存成.csv格式

这里需要注意的就是encoding一定要写GBK,utf-8、gbk(xxx)都会导致csv文件中中文乱码问题。

最后依据print是为了和网页上的总房源信息做一个比较,确认爬虫爬完了所有数据。另外温馨提示,这些爬取下来的数据是有重复的,也就是网页有同一条房源信息多次推送罗列的行为。

以上,记录完毕。

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

推荐阅读更多精彩内容