爬取深圳房源销售情况

2023-10-08 10:20

本文主要是介绍爬取深圳房源销售情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

                            

 

此次数据来源于居里新房,仅作参考使用,如有侵权,请联系我740449043@qq.com,会立即删除

_深圳的房是买不起,可以看看,那就爬取开盘销售情况,仅供参考。_

首先在items.py定义一下所需要爬取的数据名,简单来说就是定义变量
```# -*- coding: utf-8 -*-

# Define here the models for your scraped items
#
# See documentation in:
# https://doc.scrapy.org/en/latest/topics/items.html

import scrapy

#定义目标数据的字段
class TCItem(scrapy.Item):
 

#居理新房所需要用到的参数
name = scrapy.Field()                   # 小区名
sale = scrapy.Field()                   # 是否售出
ReferencePrice = scrapy.Field()         # 参考单价
ReferToTheTotalPrice = scrapy.Field()   # 参考总价
ResidentialAddress = scrapy.Field()     # 楼盘地址
OpeningTime = scrapy.Field()            # 开盘时间
roomURL = scrapy.Field()                # 楼盘所在链接


    

```


接下来我们需要编写爬虫部分,一个项目可以有多个爬虫,在这里面,先拿到每页的每一个开盘小区的URLl,通过正则匹配到需要抓取的信息,例如开盘时间,参考价格,每拿到一条数据就返回一次,以提高执行效率,提取页码,然后通过拼接构造每一页的URL,翻到末页就结束递归。

```
# -*- coding: utf-8 -*-
import scrapy
import re

#导入自定义的包
from MyScrapy.items import MyscrapyItem


class  JulixinfangSpider(scrapy.Spider):
   

name = 'JuLiXinFang'
allowed_domains = ['sz.julive.com']
page = 10
url = r'https://sz.julive.com/project/s/z'
start_urls = [url + str(page)]

    def parse(self, response):
        data = response.body.decode('utf-8')                                        # 获取响应内容

       

header = {'Accept': 'text / html, application / xhtml + xml, application / xml;q = 0.9, * / *; q = 0.8''Accept-Encoding:gzip, deflate, br''Accept-Language: en-US, en; q=0.8, zh-Hans-CN; q=0.5, zh-Hans; q=0.3''Host: movie.douban.com''Referer: https://movie.douban.com/''User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/18.17763'}data = response.body.decode('utf-8')

 # 获取每一页标签pat = r'<a class="name project-card-item" href="(.*?)" target="_blank" data-sa-point'data_1 = re.findall(pat, data)# 向每个链接发送请求for each in data_1:yield scrapy.Request(each, callback=self.parse_son,headers=header)# 执行翻页功能self.page += 1if self.page < 68:yield scrapy.Request(self.url + str(self.page), callback=self.parse,headers=header)# 此方法用来处理房源所在链接def parse_son(self, response):item = MyfirstscrapyItem()data_a = response.body.decode('utf-8')
    # 提取所需数据pat_1 = r'<h1>(.*?)</h1>'pat_2 = r'<span class="lb">参考总价</span>\s*<div class="txt clearfix">\s*<span>(.*)</span>'pat_3 = r'<div class="txt">\s*<span><em>(\d+,.*)/m²</em> </span>'pat_4 = r'</span>\s*<div class="txt clearfix">\s*<span>(.*)</span>'pat_5 = r'''data-sa-point='{"event":"e_click_surrounding_analysis_entry","properties":{"fromModule":"m_basic_info","fromItem":"i_surrounding_analysis_entry","fromItemIndex":"-1","toPage":"p_project_home","toModule":""}}'>(.*?)</a>'''pat_6 = r'<p class="txt-address">\s*<span>\s*(.*\d+)\s'pat_x = response.url             # 房子所在链接# 清洗数据try:item['name'] = re.findall(pat_1, data_a)[0]except:item['name'] = '\t'print(re.findall(pat_1, data_a))try:item['sale'] = re.findall(pat_2, data_a)[0]except:try:item['sale'] = re.findall(r'<div class="pro-tag">\s*<span class="tag-lbs lbs-zs">(.*?)</span>\s*</div>', data_a)[0]except:item['sale'] = '\t'print(item['sale'])try:item['ReferencePrice'] = re.findall(pat_3, data_a)[0]except:item['ReferencePrice'] = re.findall(r'<em>(.*?)</em>', data_a)[0]print(re.findall(pat_3, data_a))try:item['ReferToTheTotalPrice'] = re.findall(pat_4, data_a)[0]except:item['ReferToTheTotalPrice'] = re.findall(r'<p class="txt">(.*?)</p>', data_a)[0]print(re.findall(pat_4, data_a))try:item['ResidentialAddress'] = re.findall(pat_5, data_a)[0]except:item['ResidentialAddress'] = re.findall(r'''"p_surrounding_analysis","toModule":""}}'>(.*)</a>''', data_a)[0]print(re.findall(pat_5, data_a))try:item['OpeningTime'] = re.findall(pat_6, data_a)[0]except:item['OpeningTime'] = re.findall(r'<p class="txt">(.*?)</p>', data_a)[1]print(re.findall(pat_6, data_a))item['roomURL'] = pat_x# 返回数据yield item

```

数据的抓取,清洗部分已经写好了,接下来,我们要做的就是保存到数据库,这需要在管道文件pipelines.py中编写代码,以保存到数据库中
```

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html

import pymysql


#管道文件,负责item的后期处理或保存
class MyfirstscrapyPipeline(object):

    def __init__(self):#定义一些需要初始化的参数

        #连接数据库
        self.connect = pymysql.Connect(host='localhost',port=3306,user='*****',password='******',db='scrapyspider',charset='utf8')
        self.cursor = self.connect.cursor()
        #self.file = open('tengxun.csv','a+')

    #管道每次接收到item后执行的方法
    #return item 必须要有
    def process_item(self, item, spider):
        #往数据库写入数据
        '''
       

self.cursor.execute('insert into julixinfang(小区名,是否售出,参考单价,参考总价,楼盘地址,开盘时间,链接) value (%s,%s,%s,%s,%s,%s,%s)',(item['name'],item['sale'],item['ReferencePrice'],item['ReferToTheTotalPrice'],item['ResidentialAddress'],item['OpeningTime'],item['roomURL']))


        '''
        self.connect.commit()

    #当爬取执行完毕时执行的方法
    def close_spider(self,spider):
        #关闭数据库连接
        self.cursor.close()
        self.connect.close()
        #self.file.close()

```
数据写入完毕,比对下数据

 


 

 

只爬数据,不谈其他,不发表任何意见

这篇关于爬取深圳房源销售情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/164604

相关文章

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

Windows11电脑上自带的画图软件修改照片大小(不裁剪尺寸的情况下)

针对一张图片,有时候上传的图片有大小限制,那么在这种情况下如何修改其大小呢,在不裁剪尺寸的情况下 步骤如下: 1.选定一张图片,右击->打开方式->画图,如下: 第二步:打开图片后,我们可以看到图片的大小为82.1kb,点击上面工具栏的“重设大小和倾斜”进行调整,如下: 第三步:修改水平和垂直的数字,此处我修改为分别都修改为50,然后保存,可以看到大小变成63.5kb,如下:

postgres数据库中如何看查询是否走索引,以及在什么情况下走索引

在 PostgreSQL 中,可以通过 EXPLAIN 或 EXPLAIN ANALYZE 查看查询计划,以判断查询是否使用了索引。除此之外,了解索引的使用条件对于优化查询性能也很重要。 1. 如何查看查询是否使用索引 使用 EXPLAIN 查看查询计划 EXPLAIN 显示 PostgreSQL 如何执行查询,包括是否使用索引。 EXPLAIN SELECT * FROM users WH

知名AIGC人工智能专家培训讲师唐兴通谈AI大模型数字化转型数字新媒体营销与数字化销售

在过去的二十年里,中国企业在数字营销领域经历了一场惊心动魄的变革。从最初的懵懂无知到如今的游刃有余,这一路走来,既有模仿学习的艰辛,也有创新突破的喜悦。然而,站在人工智能时代的门槛上,我们不禁要问:下一个十年,中国企业将如何在数字营销的浪潮中乘风破浪? 一、从跟风到精通:中国数字营销的进化史 回顾过去,中国企业在数字营销领域的发展可谓是一部"跟风学习"的编年史。从最初的搜索引擎营销(SEM),

linux 查看内存使用情况

Linux查看CPU和内存使用情况:http://www.cnblogs.com/xd502djj/archive/2011/03/01/1968041.html 在做Linux系统优化的时候,物理内存是其中最重要的一方面。自然的,Linux也提供了非常多的方法来监控宝贵的内存资源的使用情况。下面的清单详细的列出了Linux系统下通过视图工具或命令行来查看内存使用情况的各种方法。 1. /pr

0基础学习爬虫系列:网页内容爬取

1.背景 今天我们来实现,监控网站最新数据爬虫。 在信息爆炸的年代,能够有一个爬虫帮你,将你感兴趣的最新消息推送给你,能够帮你节约非常多时间,同时确保不会miss重要信息。 爬虫应用场景: 应用场景主要功能数据来源示例使用目的搜索引擎优化 (SEO)分析关键词密度、外部链接质量等网站元数据、链接提升网站在搜索引擎中的排名市场研究收集竞品信息、价格比较电商网站、行业报告制定更有效的市场策略舆情

ubuntu内存资源使用情况监视

此处分享一个可以查看ubuntu系统中资源使用情况的指令,只需要在终端中输入一下这条指令即可: gnome-system-monitor

真实案例分享:零售企业如何避免销售数据的无效分析?

在零售业务的数据分析中,无效分析不仅浪费时间和资源,还可能导致错误的决策。为了避免这种情况,企业必须采取策略来确保他们的数据分析工作能够产生实际的商业价值。本文将通过行业内真实的案例,探讨零售企业如何通过精心设计的数据策略和分析方法,借助商业智能BI工具,避免销售数据的无效分析,确保每一次分析都能为业务增长提供有力的支持。 文章中提到的BI数据分析工具分享给大家—— https://s.fan

python网络爬虫(五)——爬取天气预报

1.注册高德天气key   点击高德天气,然后按照开发者文档完成key注册;作为爬虫练习项目之一。从高德地图json数据接口获取天气,可以获取某省的所有城市天气,高德地图的这个接口还能获取县城的天气。其天气查询API服务地址为https://restapi.amap.com/v3/weather/weatherInfo?parameters,若要获取某城市的天气推荐 2.安装MongoDB

在不损坏数据的情况下给WIN7重新划分分区

小易接到个求助电话:我的机器上已经装好了系统,但是只有一个分区。我不想重装系统重新分区,能不能再分出一个分区?   这个故障可能是困惑很多网友的一个故障。一般,有一些第三方的软件可以实现这些功能。但是,现在在 Windows Vista/Windows 7 里允许你对现有分区大小进行一定范围的调整。   来看一下操作办法:   准备工作   这个操作必须要求你的文件系统是 N