最近在家休假。 翻到了之前关于网络数据采集的电子书, 正好房子快到期了,于是想着试着写个简单的网络爬虫获取下58同城上的租房信息。

编程语言选择了python, 本职工作用的语言是c c++ java shell。但自从去年接触了python就对它爱不释手了。 一是python简单易学, 二是python几乎可以用来做任何你想做的事情: 桌面程序开发, web开发、编写自动化脚本、网络数据采集、大数据、人工智能、图像处理等等。 感觉有了python,我就用了一把万能钥匙, 编程世界里可以自由驰骋。

写这个程序时主要用到了python的两个第三方库:urllib和BeautifulSoup, 连个库在编写网络爬虫时回经常用到, 有兴趣的朋友可以在相关网站上看到两个库的介绍和用法

首先要用爬虫采集信息, 必须先有个入口, 我打开了58同城的主页, 点进租房分类, 想着以该租房主页的url作为获取数据的起点:

通过观察租房页面发现, 页面展示的租房信息是列表形式的, 总共有70页, 每页大约展示了30个租房信息。

如此需要每一页的url作为爬虫的入口。 但是手动挨个复制这70个页面的url实在太麻烦, 仔细观察了下各页面的url:

如此, 可基于第1页的url构建其它所有页的url, 相关代码如下:

这段代码要做的就是: 遍历所有的70页租房列表。 getAllLinks()函数用来获得租房列表每一行对应的详细页链接。

下面是getAllLinks()函数的原理是这样的:观察租房列表页面的html源码, 发现相应详细页面的链接都在class为des的div中, 由此可这样实现:

getPersonInfo()函数用来打开获得的详细页面, 并获取里面的出租房信息、出租人信息、出租人电话等, 这些信息也都包含在特定css的div中,如f20 css修饰的div包含着出租房信息、 c_000 css修饰的div包含着出租人姓名信息...... 这些特征可通过查看页面源码获得, 具体实现如下:

最后执行 python spider.py, 输出如下:

代码中打开url前都要sleep几秒, 原因是访问太频繁58会要求输入验证码。

通过这个小程序发现网络爬虫原理并不复杂, 主要就是分析网站的html信息, 通过一些特征提取到相应信息。 但是由于各大网站都对爬虫有限制, 怎么样绕过这些限制才是核心的问题。还有就是怎么使用这些采集下来的数据才是最重要的。

我们在用爬虫采集别人网站数据时, 请不要占用太多的资源以防止对别人服务器造成压力, 影响正常网站的正常使用。

由于接触网络数据采集不久, 很多理解都有欠缺, 如所写内容有欠缺或错误,期望与更多的数据采集方面有经验的开发者共同探讨共同进步。

需要源码的朋友可留下邮箱, 空闲时我会发到您留下的邮箱里。