Scrapy爬取房价信息

选题背景

时代在发展,技术在进步,互联网改变了全世界,各行各业都在这个互联⽹时代寻求自身的增长点,⼈们的日常⽣活也越来越离不开互联网。以租房为例,线下租房行业持续遭到冲击,越来越多的年轻⼈选择在互联网上挑选房源。然而网上信息混杂,数据来源众多,如何提升租房用户体验就成了⼀个值得探讨的问题。

选题意义

随着我国房价的不断攀升,越来越多人选择租房,特别是一些经济发展比较靠前的城市,目前中国租房的人口已经达到2亿多,数据显示有将近三分之二的人通过网络来获取租房信息,有70%左右的房东会将租房信息挂在网上,但网上租房信息资源比较分散,当需要进行数据分析筛选出性价比合适的租房信息时需要消耗大量的时间去进行人工比对,十分不便。本次选题对房天下上海租房网页的爬取可以是租房信息更加集中明了的呈现在大家眼前

课题实现相关技术

1 Python语言
本次对网站“房天下”的爬取运用了python语言,Python 是一种面向对象、解释型、弱类型的脚本语言,它也是一种功能强大而完善的通用型语言。
目前,主流的Python开发环境有三个(开发环境也被称为IDE, Integrated Development Environment),分别是PyCharm、Anaconda 和Jupyter Notebook,我们称之为Python三剑客。本次对“房天下”网站的爬取则是运用了 PyCharm。
本次对“房天下”网站的爬取主要运用了以下这几个python的语法:
(1)、from … import
如果想直接使用其他模块的变量或其他,而不加’模块名+.'前缀,可以使用from … import。
在这里插入图片描述
(2)、for 循环, for…in
Python中for in是循环结构的⼀种,经常⽤于遍历字符串、列表,元组,字典等,格式为for x in y:,执⾏流程:x依次表⽰y中的⼀个元素,遍历完所有元素循环结束。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(3)、函数
函数通过def定义。def关键字后跟函数的标识符名称,然后跟一对圆括号,括号之内可以包含一些变量名,该行以冒号结尾;接下来是一块语句,即函数体。
在这里插入图片描述
在这里插入图片描述
(4)、数据结构
字典
在这里插入图片描述
2 Request库
Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。
命令:pip install requests
项目导入:import requests

Requests库七个主要方法:
requsts.requst() 构造一个请求,最基本的方法,是下面方法的支撑 requsts.get() 获取网页,对应HTTP中的GET方法
requsts.post() 向网页提交信息,对应HTTP中的POST方法
requsts.head() 获取html网页的头信息,对应HTTP中的HEAD方法 requsts.put() 向html提交put方法,对应HTTP中的PUT方法
requsts.patch() 向html网页提交局部请求修改的的请求,对应HTTP中的PATCH方法
requsts.delete() 向html提交删除请求,对应HTTP中的DELETE方法
requests库是一个常用于http请求的模块,性质是和urllib,urllib2是一样的,作用就是向指定目标网站的后台服务器发起请求,并接收服务器返回的响应内容。
3 bs4库
在本次对“房天下”网站的爬取中,我主要用到了bs4库。Beautiful Soup 简称 BS4(其中 4 表示版本号)是一个 Python 第三方库,它可以从 HTML 或 XML 文档中快速地提取指定的数据。
Beautiful Soup安装命令:pip install bs4
由于 BS4 解析页面时需要依赖文档解析器,所以还需要安装 lxml 作为解析库,安装命令:pip install lxml

课题实现

标题页
在这里插入图片描述
详情页
在这里插入图片描述

在这里插入import scrapy
#导入scrapy框架
from bs4 import BeautifulSoup
#导入bs4库


class ShzufangSpider(scrapy.Spider):
    name = 'shzufang'
allowed_domains = ['fang.com']
#默认跟踪的url必须在这个域中
start_urls = []
#url列表

def start_requests(self):
        for i in range(2):
#开始url参数循环
            self.start_urls.append('https://sh.zu.fang.com/house/i3{}/?rfss=1-a93ccc2936991daf58-9a'.format(i+1))
#导入爬取链接
        for url in self.start_urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        print(response.url)
        bs = BeautifulSoup(response.text, "html.parser")
        all = bs.find_all('dl', attrs={'class': 'list hiddenMap rel'})

        for i in all:
            href = i.find('dd', attrs={'class': 'info rel'}).find('p', attrs={'class': 'title'}).find('a').get('href')
            print(href)
            yield scrapy.Request(
                url=response.urljoin(href),
                method='GET',
                callback=self.xiangqing,
            )
            # break

    def xiangqing(self, res):
        # print(res.text)
        name = "".join(res.xpath("/html/body/div[5]/div[1]/div[1]/text()").extract())
#xpath解析数据
        name = name.replace('\r', '').replace('\n', '').replace(' ', '')
#爬取名称
        price = "".join(res.xpath("/html/body/div[5]/div[1]/div[4]/div[2]/div//text()").extract())
        price = price.replace('\r', '').replace('\n', '').replace(' ', '')
#爬取价格
        info = res.xpath("/html/body/div[5]/div[1]/div[4]//div[@class='tt']//text()").extract()
        for i in range(len(info)):
#使用for循环
            info[i] = info[i].replace('\r', '').replace('\n', '').replace(' ', '')
        info_str = ""
        for i in info:
            if i:
                info_str += i + "|"
        info_str = info_str[:-1]
        shebei = res.xpath("/html/body/div[5]/div[2]/div[1]/div[2]/div[2]/ul/li/text()").extract()
#爬取设备

        data = dict()
        data['name'] = name
        data['price'] = price
        data['info_str'] = info_str
        data['shebei'] = shebei
        print("{},{},{},{}".format(data['name'],data['price'],data['info_str'],data['shebei']))
#使用字典输出
        yield data
代码片
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chase℡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值