思路介绍

爬取链家广州所有小区信息、在售楼盘及所有历史成交记录,对于超过100个页面的信息,采用曲线爬取的方式,先爬每个小区,然后爬每个小区的在售楼盘及成交记录,后期将进行相应更新,进一步研究Cookie的使用、Proxy(代理)的设置、模拟登录、验证码识别等问题。环境基于Python 2.7。

请求

这里我使用的package是urllib和urllib2,这里列一下爬取过程中需要注意的一些问题。
- 模拟浏览器的行为,设置headers。
- Python 2.x中常见的字符编码和解码问题

首先了解一下字节、字符和编码的关系,ASCII、Unicode和UTF-8的关系,ASCII码一共规定了128个字符的编码,Unicode是一个符号集,只规定了符号的二进制代码,没有规定此二进制代码应该如何存储,结果出现Unicode的多种存储方式,即有许多种不同的二进制格式,可以用来表示Unicode。而UTF-8就是目前使用最广的一种Unicode的实现方式。

Python 2.x里有两种类型的字符串类型:字节字符串和Unicode的字符串。Python根据电脑默认的locale设置将字节转换为字符。

# 获取系统默认的编码方式
<<< import sys
<<< print sys.getdefaultencoding()
'ascii'  # windows默认的编码是ascii
# 更改系统的默认编码
<<< import sys
<<< reload(sys)
<<< sys.setdefaultencoding('UTF-8')
# 为什么reload(sys)
# Python运行时首先加载site.py,把setdefaultencoding方法删除了
if hasattr(sys, "setdefaultencoding"):del sys.setdefaultencoding
# Python源代码默认是ASCII,可以在源文件开头作如下声明
# -*- coding: UTF-8 -*-
# 读取UTF-8编码的文件,可以手工转换从文件中读取的字符串
<<< import codecs
<<< fileObj = codecs.open("someFile", "r", "UTF-8")
# Returns a Unicode string from the UTF-8 bytes in the file
<<< u = fileObj.read()

Python的decode函数和encode函数,decode是将普通字符串按照参数指定编码格式进行解析,然后生成相应的Unicode对象,encode函数是将一个Unicode对象转换为参数中编码格式的普通字符。

<<< s1 = '哈'.decode('utf-8')
u'\u54c8'
<<< s2 = '哈'.decode('utf-8').encode('utf-8')
'\xe5\x93\x88'

解析

这里采用的是BeautifulSoup,采用标准库中的html解析器,配合正则表达式进行解析。

单页爬虫的代码示例

#! python2
# -*- coding: utf-8 -*-
"""crawl module@Author: padluo
@WeChat: padluo
"""
import random
import re
import urllib2from bs4 import BeautifulSoupHDS = [{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.12 Safari/535.11'},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)'},{'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:34.0) Gecko/20100101 Firefox/34.0'},{'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/44.0.2403.89 Chrome/44.0.2403.89 Safari/537.36'},{'User-Agent': 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},{'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50'},{'User-Agent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0'},{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},{'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1'},{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'},{'User-Agent': 'Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11'},{'User-Agent': 'Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11'}
]def xiaoqu_crawl(db_xq=None,url_page=u'http://gz.lianjia.com/xiaoqu/pg1rs%E9%87%91%E7%A2%A7%E4%B8%96%E7%BA%AA%E8%8A%B1%E5%9B%AD/'):"""爬取页面链接中的小区信息:param db_xq::param url_page::return:"""try:# 请求url_page = u'http://gz.lianjia.com/xiaoqu/pg1rs%E9%87%91%E7%A2%A7%E4%B8%96%E7%BA%AA%E8%8A%B1%E5%9B%AD/'req = urllib2.Request(url_page,headers=HDS[random.randint(0, len(HDS) - 1)])source_code = urllib2.urlopen(req, timeout=10).read()plain_text = source_code.decode('utf-8')soup = BeautifulSoup(plain_text, 'html.parser')except (urllib2.HTTPError, urllib2.URLError), e:print eexit(-1)except Exception, e:print eexit(-1)# 解析xiaoqu_list = soup.find_all('div', attrs={'class': 'info'})for xq in xiaoqu_list:info_dict = {}info_dict.update({u'小区链接': xq.find('a')['href']})info_dict.update({u'小区名称': xq.find('a', attrs={'target': '_blank'}).get_text()})content = xq.find('div', attrs={'class': 'houseInfo'}).renderContents().strip().decode('utf-8')pat = r'<span.*?/span>.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>'info = re.match(pat, content, re.S)if info:info = info.groups()info_dict.update({u'90天成交量': info[0]})info_dict.update({u'正在出租量': info[1]})content = xq.find('div', attrs={'class': 'positionInfo'}).renderContents().strip().decode('utf-8')pat = r'<span.*?span>.*?<a.*?>(.*?)</a>.*?<a.*?>(.*?)</a>.*?/\xa0(.*)'info = re.match(pat, content, re.S)if info:info = info.groups()info_dict.update({u'大区域': info[0]})info_dict.update({u'小区域': info[1]})info_dict.update({u'建成时间': info[2]})for info_key, info_value in info_dict.items():print info_key + '->' + info_valueif __name__ == '__main__':xiaoqu_crawl()

结果如下:

小区链接->http://gz.lianjia.com/xiaoqu/2111103317968/
大区域->黄埔
建成时间->2004年建成
正在出租量->20套正在出租
小区域->区府
小区名称->金碧世纪花园
90天成交量->90天成交11套

Python爬虫实战之爬取链家广州房价_01简单的单页爬虫相关推荐

  1. python爬取链家新房_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  2. python爬取链家新房数据_Python爬虫实战:爬取链家网二手房数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 买房装修,是每个人都要经历的重要事情之一.相对于新房交易市场来说,如今的二手房交易市场一点也 ...

  3. 基于python多线程和Scrapy爬取链家网房价成交信息

    文章目录 知识背景 Scrapy- spider 爬虫框架 SQLite数据库 python多线程 爬取流程详解 爬取房价信息 封装数据库类,方便多线程操作 数据库插入操作 构建爬虫爬取数据 基于百度 ...

  4. python爬取南京市房价_Python的scrapy之爬取链家网房价信息并保存到本地

    因为有在北京租房的打算,于是上网浏览了一下链家网站的房价,想将他们爬取下来,并保存到本地. 先看链家网的源码..房价信息 都保存在 ul 下的li 里面 ​ 爬虫结构: ​ 其中封装了一个数据库处理模 ...

  5. python爬取链家房价消息_Python的scrapy之爬取链家网房价信息并保存到本地

    因为有在北京租房的打算,于是上网浏览了一下链家网站的房价,想将他们爬取下来,并保存到本地. 先看链家网的源码..房价信息 都保存在 ul 下的li 里面 ​ 爬虫结构: ​ 其中封装了一个数据库处理模 ...

  6. python 爬虫实践 (爬取链家成交房源信息和价格)

    简单介绍 pi: 简单介绍下,我们需要用到的技术,python 版本是用的pyhon3,系统环境是linux,开发工具是vscode:工具包:request 爬取页面数据,然后redis 实现数据缓存 ...

  7. python爬虫爬取链家网房价信息

    打开链家网页:https://sh.lianjia.com/zufang/  :用F12以页面中元素进行检查 <a target="_blank" href="/z ...

  8. python爬虫——使用bs4爬取链家网的房源信息

    1. 先看效果 2. 进入链家网,这里我选择的是海口市点击跳转到链家网 3. 先看网页的结构,这些房子的信息都在li标签,而li标签再ul标签,所以怎么做大家都懂 4. 代码如下,url的链接大家可以 ...

  9. 【爬虫】爬取链家网青城山二手房源信息

    一.项目背景 本项目是用python爬虫来实现爬取链家网青城山的二手房信息,我们小组是针对于在我们成都东软学院周边的二手房信息做一个数据爬取和建表.我们小组做这个项目的背景是因为在不久的将来,我们大学 ...

  10. 掌财社:python怎么爬取链家二手房的数据?爬虫实战!

    我们知道爬虫的比较常见的应用都是应用在数据分析上,爬虫作为数据分析的前驱,它负责数据的收集.今天我们以python爬取链家二手房数据为例来进行一个python爬虫实战.(内附python爬虫源代码) ...

最新文章

  1. 实现大数据可视化的10个技巧
  2. Java学习_day007:数组与方法
  3. Linux Kernel TCP/IP Stack — 网卡监控
  4. python小工具myqr生成动态二维码
  5. m_Orchestrate learning system---二十、如何写代码不容易犯错
  6. Jsoup解析HTML实例及文档方法详解
  7. Java实现查找2-60以内的完数和盈数
  8. GIL锁,线程锁(互斥锁)和递归锁
  9. 2013应届毕业生“用友政务”校招应聘总结
  10. IntelliJ IDEA多屏后窗口不显示问题解决(用工具一键解决)
  11. 三种方法在地图上绘制网络图
  12. python实现归并排序_排序算法学习(python版本)之归并排序(MergeSort)
  13. 简单工厂模式-工厂模式-抽象工厂模式类图
  14. 4G内存适合装哪个版本matlab,4G内存装win7 32位还是64位|单条4G内存选32位还是64位系统性能实测...
  15. imx6上调用 vpu
  16. 70 Three.js 导入STL格式的模型
  17. byteTrack数据集categories不规范带来的问题
  18. 利用http://www.forshare.me/qq/访问陌生人的QQ空间
  19. 安卓系统或安卓机顶盒如何安装entware来搭建liunx系统环境
  20. 基于百度图像识别api的游戏(coc)辅助工具分析

热门文章

  1. myqq框架 python插件
  2. 完美世界国际版不用外挂多开的方法
  3. AD7705应用总结:
  4. 继谷歌之后 雅虎退出中国音乐市场
  5. 《电路》邱关源 思维导图 第一章-电路模型和电路定律
  6. 某游戏浏览器Flash加速dll调用,打造我们自己的Flash加速器
  7. 寻找春天nbsp;九宫格日记-2011.08.24
  8. 互动快报读报软件绿色版 v5.061
  9. ubuntu 安装 flash 软件 卸载
  10. 计算机诗人 原理,写诗软件