目 录
摘 要 1
ABSTRACT 2
一、绪论 3
(一)研究背景及需求分析 3
(二)国内外研究现状 4
1.爬虫技术概述 5
2. 爬虫设计者面临的问题与反爬虫技术现状 6
(三)研究目标及研究内容 8
(四)论文的整体结构 9
(五)本章小结 10
二、相关理论及技术 11
(一)robot协议对本设计的影响 11
(二)爬虫 11
1.工作原理 11
2.工作流程 12
3.抓取策略 12
(三)python发展现状 12
(四)XPath 13
(五)scrapy架构 13
1.scrapy:开源爬虫架构 13
2.scrapy框架结构 14
3.两种继承,两种爬虫模式 15
(六)MongoDB数据库 16
1.NoSQL数据库介绍 16
2.MongoDB数据库介绍 17
(七)python web框架Django 17
1.Django框架介绍 17
2.MTV模式 17
3.ORM模式 18
4.template模板语言 18
5. Django工作机制 18
(八)semantic UI开发框架 19
1.semantic介绍 19
2.semantic开发 20
(九)高德地图API 20
(十)本章小结 20
三、系统分析与设计 21
(一)系统分析 21
1.系统功能 21
2.爬取对象分析 21
3.模块设计 22
(二)数据流 23
(三)系统总体逻辑层次 24
(四)本章小结 25
四、爬虫与数据存储、展示的具体实现 26
(一)爬虫模块 26
1.环境搭建与前期分析 26
2.网页结构分析 27
3.数据抓取模块 28
4.数据存储模块 34
5.反反爬虫模块 35
(二)数据库设计 38
1.数据库环境搭建 38
2.数据库表设计 39
(三)数据展示模块 40
1.django环境搭建 40
2.前端UI模块 41
3.网页架构搭建模块 44
4.前端与数据库连接模块 45
5.地图展示模块 46
(四)开启Django服务器 47
(五)成果展示 48
(六)本章小结 49
五、系统测试 50
(一)测试环境及工具 50
(二)系统功能性测试 50
1.数据爬取功能测试 50
2.数据展示测试 53
(三)系统非功能性测试 53
(四)本章小结 54
总结与展望 55
参考文献 56
致 谢 58
(三)研究目标及研究内容
本系统的研究目标为:
1.对国内外网络爬虫技术与反爬虫技术研究现状、网络协议及协议运行相关技术等背景知识进行了解,对国内网租房市场进行调查了解;
2.研究学习scrapy爬虫架构及非结构化数据库相关技术;
3.分析目标用户人群对房屋租赁信息的业务需求,结合市面上房屋租赁信息平台的特点,设计整个系统的数据流动方式、设计多个框架之间相互协作的业务流程;
4.针对部分网页的反爬取策略,采用反反爬虫技术,完成对房屋租赁网站信息的获取;
5.结合房屋租赁信息的数据特点,对爬取到的房屋租赁数据进行合理的处理,并且利用非关系数据库MongoDB设计实现数据存储,为数据展示提供必要的数据支持;
6.研究学习web框架Django,完成网站搭建,学习semantic UI编写网页界面,使用列表形式或地图形式完成数据展示;
6.对该系统进行功能性与非功能性测试,验证系统的可用性;
7.总结所做的工作,对进一步的研究工作作出展望。
本系统实现了一个房屋租赁信息爬取与数据展示系统。首先通过python开源爬虫框架scrapy对目标房屋租赁信息网站进行爬取,包括58同城、安居客、107间房、我爱我家网、房天下、列表网、58同城移动端等,依据不同网页的不同特性选择不同的爬取策略,编写爬虫代码,过滤并抽取所需出租房源信息,建立以城市为区分的房源信息数据库。数据库部分采用非结构化数据库MongoDB,避免网上信息的非结构性对数据存储的影响。然后采用python开源网站搭建框架Django完成对爬取到的租房信息的web端展示。除此之外,本系统采用高德地图API提供的“坐标拾取器”功能完成位置信息与经纬度之间的转换,并将爬取到的数据可视化展示在地图上,一并展示于前端页面。在爬虫部分,除了对房屋租赁信息的爬取外,还实现了对网上免费代理的爬取、存储、有效性验证与维护。本系统还涉及到的技术有:MongoDB与scrapy框架的集成,MongoDB与Django框架的集成,semantic UI快速html5界面开发等。
(四)论文的整体结构
本论文共由六章组成,各章节安排如下:
第一章绪论,说明了该系统开发的可行性与现实应用意义,介绍了爬虫技术及反爬虫技术的发展现状,介绍了开发该系统所预期达到的目标及所需做的工作。
第二章对系统中涉及到的相关技术进行了介绍,并说明了相关技术在本系统中的作用。如Robot协议等,其中着重对爬虫架构scrapy、非结构化数据库MongoDB、开源网站框架Django进行了介绍。
第三章为系统分析与设计,本章对所要完成的系统进行了整体分析设计。分析了系统所要实现的功能,设计出总体架构,对其进行细分,分成各个模块,然后对各个模块进行了介绍。
第四章为系统设计实现与成果展示,本章编写代码实现了爬虫,对数据库进行了设计,并完成了数据展示模块。最后对本系统的运行成果进行了展示。
第五章系统测试。本文转载自http://www.biyezuopin.vip/onews.asp?id=12201本章对整个系统进行测试,包括对测试环境的描述,对系统的功能性测试和非功能性测试。
第六章总结与展望,本章对系统进行总结,并总结了开发过程中的一些所思所想。然后对本系统的进一步研究方向进行了展望。
(五)本章小结
本章主要是对该系统进行了介绍。首先介绍了研究该问题的背景、可行性及现实意义,接着对国内外相关领域的研究进行了分析。接着根据以上分析引出了本系统的主要研究内容,最后对本篇论文的结构进行了介绍。
from django.shortcuts import render
from rental_house_infos_display.models import HouseInfos, HouseInfos_sz
from django.core.paginator import Paginator
# Create your views here.
def index(request):
return render(request, 'index.html')
def indexen(request):
return render(request, 'indexen.html')
def indexch(request):
return render(request, 'indexch.html')
def list_ty(request):
limit = 50 #给生成器传的第二个参数,表示每页的数目
house_info = HouseInfos.objects #从model中传来的collection类,生成实例,拿到数据
paginatior = Paginator(house_info,limit) #生成分页
page = request.GET.get('page',1) #获取页数,这样写后面翻页的url会为/page=3
data = paginatior.page(page) #获取每页的数据对象
content = {
'house_info':data, #传入content,前面又类似于面向对象
'counts':house_info.count(),
#'last-time':house_info.order_by('price').limit(1)
}
return render(request, 'list_ty.html', content)
def list_sz(request):
limit = 50 #给生成器传的第二个参数,表示每页的数目
house_info = HouseInfos_sz.objects #从model中传来的collection类,生成实例,拿到数据
paginatior = Paginator(house_info,limit) #生成分页
page = request.GET.get('page',1) #获取页数,这样写后面翻页的url会为/page=3
data = paginatior.page(page) #获取每页的数据对象
content = {
'house_info':data, #传入content,前面又类似于面向对象
'counts':house_info.count(),
#'last-time':house_info.order_by('price').limit(1)
}
return render(request, 'list_sz.html', content)
def map_ty(request):
return render(request, 'map_ty.html')

















