Python实现的链家网站的爬虫第二部分。

本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用。

本系列第一部分:

如何高效地爬取链家的房源信息(一)

本文是第二部分,爬取小区信息并存入数据库,部分代码依赖于第一部分。

在前文中已经获取了大区域的URL,接下来只需要遍历各个URL即可爬下所有小区信息:

# 爬下所有的小区信息

for regionurl in regionurls:

do_xiaoqu_spider(db_xq, regionurl)

对一个区内的所有小区进行爬取,需要分页:

def do_xiaoqu_spider(db_xq, url=u"https://nj.lianjia.com/xiaoqu/gulou/"):

"""

爬取大区域中的所有小区信息

"""

try:

req = urllib.request.Request(url, headers=hds[random.randint(0, len(hds) - 1)])

source_code = urllib.request.urlopen(req, timeout=5).read()

plain_text = source_code.decode('utf-8');

soup = BeautifulSoup(plain_text,"html.parser")

except (urllib.request.HTTPError, urllib.request.URLError) as e:

print(e)

return

except Exception as e:

print(e)

return

d = "d="+soup.find('div', {'class': 'page-box house-lst-page-box'}).get('page-data')

loc = {}

glb = {}

exec(d, glb, loc);

total_pages = loc['d']['totalPage']

threads = []

for i in range(total_pages):

url_page = url+u"pg%d/" % (i + 1);

print(url_page);

t = threading.Thread(target=xiaoqu_spider, args=(db_xq, url_page))

threads.append(t)

for t in threads:

t.start()

for t in threads:

t.join()

print(u"爬下了 %s 区全部的小区信息" % url)

爬取单个页面内的小区信息:

def xiaoqu_spider(db_xq, url_page=u"https://nj.lianjia.com/xiaoqu/gulou/pg1/"):

"""

爬取页面链接中的小区信息

"""

try:

req = urllib.request.Request(url_page, headers=hds[random.randint(0, len(hds) - 1)])

source_code = urllib.request.urlopen(req, timeout=10).read()

plain_text = source_code.decode('utf-8');

soup = BeautifulSoup(plain_text,"html.parser")

except (urllib.request.HTTPError, urllib.request.URLError) as e:

print(e)

exit(-1)

except Exception as e:

print(e)

exit(-1)

xiaoqu_list = soup.findAll('li', {'class': 'clear xiaoquListItem'})

for xq in xiaoqu_list:

info_dict = {}

title = xq.find('div', {'class': 'title'});

info_dict.update({u'小区名称': title.text})

d=title.findAll('a')

for item in d:

href = item['href'];

info_dict.update({u'url': href})

postioninfo = xq.find('div', {'class': 'positionInfo'}).renderContents().strip().decode('utf-8');

content = "".join(postioninfo.split())

info = re.match(r".+district.+>(.+)</a>.+bizcircle.+>(.+)</a>(.+)", content)

if info:

info = info.groups()

info_dict.update({u'大区域': info[0]})

info_dict.update({u'小区域': info[1]})

info_dict.update({u'建造时间': info[2]})

command = gen_xiaoqu_insert_command(info_dict)

db_xq.execute(command, 1)

爬取的小区信息将被存储到数据库表中,供后续使用。


在接下来将说明如何爬取在售二手房信息、历史成交二手房信息,敬请期待。

长按进行关注。

如何高效地爬取链家的房源信息(二)相关推荐

  1. 如何高效地爬取链家的房源信息(四)

    "Python实现的链家网站的爬虫第四部分,最后一部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第 ...

  2. 如何高效地爬取链家的房源信息(三)

    "Python实现的链家网站的爬虫第三部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第一部分为基础 ...

  3. 如何高效地爬取链家的房源信息(一)

    "Python实现的链家网站的爬虫第一部分." 在之前的文章,以链家成都站为例,分析过链家网站数据的爬取,文章如下: 干货!链家二手房数据抓取及内容解析要点 但是,当时没有根据分析 ...

  4. python+selenium爬取链家网房源信息并保存至csv

    python+selenium爬取链家网房源信息并保存至csv 抓取的信息有:房源', '详细信息', '价格','楼层', '有无电梯 import csv from selenium import ...

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

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

  6. 如何爬取链家网页房源信息

    由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息  利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数.  urlopen:将 ...

  7. 一、如何爬取链家网页房源信息

    由于个人安装的Python版本是2.7的,因此此后的相关代码也是该版本. 爬取网页所有信息 利用urllib2包来抓取网页的信息,先介绍下urllib2包的urlopen函数. urlopen:将网页 ...

  8. 爬取链家所有房源信息(在售、成交、租房)

    环境:Windows10+Anaconda python3.6.5+Spyder 目标:抓取链家北京地区所有房源信息. 打开链家官网 https://bj.lianjia.com/ .粗略的浏览了一下 ...

  9. Python爬取链家成都二手房源信息

    作者 | 旧时晚风拂晓城 编辑 | JackTian 来源 | 杰哥的IT之旅(ID:Jake_Internet) 转载请联系授权(微信ID:Hc220066) 公众号后台回复:「成都二手房数据」,获 ...

最新文章

  1. Android Scroller 使用详解
  2. 用友华表cell的程序发布
  3. Java魔法堂:枚举类型详解
  4. 【Java】实战Java虚拟机之五“开启JIT编译”
  5. python文件操作与异常处理_Python学习——文件操作和异常处理
  6. hibernate更新部分字段的几种方法
  7. 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误
  8. Redis:22---客户端API:client、monitor)
  9. 在存储过程中编写正确的事务处理代码
  10. 开工第一天,这个超时问题把我干趴下了
  11. python地图匹配_python通过BF算法实现关键词匹配的方法
  12. c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
  13. hadoop1.2.1伪分布式搭建
  14. excel字符串和单元格拼接_Excel工作表中带单位求和的4个技巧,不掌握就真的Out了!...
  15. linux内核默认imx6速率配置,Linux4.1.15内核移植-imx6ull
  16. 数据仓库的模型设计流程
  17. yocto相关class总结
  18. DeepMind用AlphaZero开发国际象棋新规则!
  19. csv to dbf java_CSV to DBF
  20. 【小技巧】周杰伦没有离开网易云音乐

热门文章

  1. python魔术方法call_php魔术方法__call
  2. H5 自动播放背景音频,兼容安卓和苹果手机, ios createInnerAudioContext 无法自动播放解决
  3. 微信小程序获取多选框选中值和选中值对应的id
  4. iOS lldb调试
  5. 开放平台鉴权以及OAuth2.0介绍
  6. RHEL6.3安装vsftpd
  7. Java String.split()用法小结
  8. Powershell管理系列(十)邮件联系人及邮件用户的管理
  9. 使用command-privilege给H3C、华为设备的用户帐号授权
  10. 关于java.util.LinkedHashMap cannot be cast to ......的解决办法