text import TextResponse

简介: q

系统需要对爬取到的数据进行数据可视化
本系统获取到的数据是存储在数据库中的,当需要对爬取数据进行查看时,特别是爬取到的房源数据量很大的时候,数据查看很不方便,而且数据库浏览界面太过单一,无法突出数据特点,所以通过使用界面以数据可视化的形式将爬取到的房源数据展示出来。
3.2 功能性需求分析
3.2.1 数据爬取功能
数据爬取功能是指将房源信息数据从数据来源网站爬取下来的功能。本系统是面向二手房信息的分布式爬取,原始数据来源于链家网广州二手房。分布式爬取是使用一个Master服务器和多个Slave服务器快速的对网页进行爬取,加快爬取速度和效率;Master端负责对目录页中的URL进行爬取和存储,Slave端负责对详情页的URL进行爬取和存储。

import scrapy
from scrapy.http.response.text import TextResponse
from datetime import datetime
import hashlib

from scrapy_lianjia_ershoufang.items import ScrapyLianjiaErshoufangItem

class ErshoufangSpider(scrapy.Spider):

name = 'ErshoufangSpider'

def __init__(self, name=None, **kwargs):
    super().__init__(name=None, **kwargs)
    if getattr(self, 'city', None) is None:
        setattr(self, 'city', 'sz')
    self.allowed_domains = ['%s.lianjia.com' % getattr(self, 'city')]

def start_requests(self):
    city = getattr(self, 'city')
    urls = ['https://%s.lianjia.com/ershoufang/pg%d/' % (city, i)
            for i in range(1, 101)]
    for url in urls:
        yield scrapy.Request(url, self.parse, headers={'Referer': url})

def parse(self, response: TextResponse):
    items = response.css('ul.sellListContent li')
    for li in items:
        item = ScrapyLianjiaErshoufangItem()
        item['title'] = li.css('div.title a::text').get().replace(':', '').replace(',', ' ').replace("\n", '')
        house_infos = li.css('div.address .houseInfo::text').re(
            r'\|\s+(.*)\s+\|\s+(.*)平米\s+\|\s+(.*)\s+\|\s+(.*)\s+\|\s+(.*)')
        item['room'] = house_infos[0]
        item['area'] = house_infos[1]
        item['orientation'] = house_infos[2]
        item['decoration'] = house_infos[3]
        item['elevator'] = house_infos[4]
        item['xiaoqu'] = li.css('div.address a::text').get()
        item['flood'] = li.css('div.flood .positionInfo::text').get().replace('-', '').strip()
        item['location'] = li.css('div.flood .positionInfo a::text').get()
        follow_infos = li.css('div.followInfo::text').re(r'(.*)人关注\s+/\s+共(.*)次带看\s+/\s+(.*)发布')
        item['follow_number'] = follow_infos[0]
        item['look_number'] = follow_infos[1]
        item['pub_duration'] = follow_infos[2]
        item['total_price'] = li.css('div.priceInfo div.totalPrice span::text').get()
        unit_price = li.css('div.priceInfo .unitPrice span::text').re(r'单价(.*)元/平米')
        item['unit_price'] = unit_price[0]
        item['total_unit'] = li.css('div.totalPrice::text').get()
        item['crawl_time'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        item['house_id'] = self.genearteMD5(''.join((str(item['title']), str(item['room']), str(item['area']),
                                                     str(item['orientation']), str(item['elevator']),
                                                     str(item['xiaoqu']),
                                                     str(item['flood']), str(item['location']))))
        yield item

def genearteMD5(self, text):
    # 创建md5对象
    hl = hashlib.md5()
    hl.update(text.encode(encoding='utf-8'))
    return hl.hexdigest()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60

————————————————

相关文章
|
Web App开发 前端开发
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
原文见:http://kafka.apache.org/documentation.html#semantics kafka在生产者和消费者之间的传输是如何保证的,我们可以知道有这么几种可能提供的delivery guarantee: At most once 消息可能会丢,但绝不会重复传输 At least one 消息绝不会丢,但可能会重复传输 Exactly once 每条消息肯定会被传输一次且仅传输一次,很多时候这是用户所想要的。
887 0
|
4天前
|
人工智能 弹性计算 运维
开启运维新纪元!阿里云OS Copilot深度评测 & 体验分享
OS Copilot是Alibaba Cloud为Linux推出的一款基于大模型的智能助手,它能理解自然语言、辅助命令执行和系统运维。目前仅支持Alibaba Cloud Linux 3的x86_64架构。安装过程涉及线上和本地体验,包括申请试用、配置环境变量、安装组件等步骤。OS Copilot提供命令行和多轮交互模式,能进行代码生成和摘要,辅助开发和运维工作。产品体验评测中,OS Copilot因其自然语言理解和高效辅助得到高度评价,尤其对运维人员来说,能大幅提升工作效率。然而,目前仅限于特定操作系统,是其局限性。未来有望扩展更多功能和支持更多平台。
97040 13
|
1天前
|
存储 SQL 消息中间件
Hologres+Flink企业级实时数仓核心能力介绍
通过Hologres+Flink构建易用、统一的企业级实时数仓。
|
6天前
|
人工智能 弹性计算 API
创意“孵化机”——基于通义万相加速绘画创作流程
阿里云在2023年推出了AI绘画平台**通义万相**,该平台能够根据文本描述生成图像,应用于艺术创作。近期,阿里云优化了通义万相的接入方式,提供API文档和一键部署服务,使得非技术人员也能轻松集成到Web应用中。为促进用户尝试,阿里云还推出了解决方案评测活动,参与者有机会获得奖品。通义万相通过ECS、OSS、VPC和DashScope等云服务支持,简化了技术架构,加速了绘画创作流程。此外,阿里云提供了优惠购买方案,新人享有特别折扣。该服务不仅适用于艺术家,还可应用于多个领域,提高内容生成效率。
70723 20
|
3天前
|
存储 关系型数据库 分布式数据库
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
在今年的SIGMOD会议上,阿里云瑶池数据库团队的论文《PolarDB-MP: A Multi-Primary Cloud-Native Database via Disaggregated Shared Memory》获得了Industry Track Best Paper Award,这是中国企业独立完成的成果首次摘得SIGMOD最高奖。PolarDB-MP是基于分布式共享内存的多主云原生数据库,本文将介绍这篇论文的具体细节。
内附原文|详解SIGMOD’24最佳论文:PolarDB如何破解多主架构经典难题?
|
10天前
|
人工智能 自然语言处理 算法
阿里云PAI大模型评测最佳实践
在大模型时代,模型评测是衡量性能、精选和优化模型的关键环节,对加快AI创新和实践至关重要。PAI大模型评测平台支持多样化的评测场景,如不同基础模型、微调版本和量化版本的对比分析。本文为您介绍针对于不同用户群体及对应数据集类型,如何实现更全面准确且具有针对性的模型评测,从而在AI领域可以更好地取得成就。
|
15天前
|
弹性计算 关系型数据库 数据库
手把手带你从自建 MySQL 迁移到云数据库,一步就能脱胎换骨
阿里云瑶池数据库来开课啦!自建数据库迁移至云数据库 RDS原来只要一步操作就能搞定!
|
15天前
|
机器学习/深度学习 算法 开发工具
通义千问2(Qwen2)大语言模型在PAI-QuickStart的微调、评测与部署实践
阿里云的人工智能平台PAI,作为一站式的机器学习和深度学习平台,对Qwen2模型系列提供了全面的技术支持。无论是开发者还是企业客户,都可以通过PAI-QuickStart轻松实现Qwen2系列模型的微调、评测和快速部署。
|
16天前
|
人工智能 机器人 API
用AppFlow玩转通义百炼大模型应用
阿里云百炼平台提供一站式大模型开发服务,支持创建和定制应用,预置丰富插件和API。用户可以通过平台快速构建大模型应用,并利用AppFlow将其接入钉钉群聊,以AI卡片形式展示。
72978 5
|
14天前
|
存储 网络协议 安全
阿里云hpc8ae实例商业化发布详解
近日,全球领先的云计算厂商阿里云宣布最新HPC优化实例hpc8ae的正式商业化,该实例依托阿里云自研的「飞天+CIPU」架构体系,搭载第四代AMD EPYC处理器,专为高性能计算应用优化,特别适用于计算流体、有限元分析、多物理场模拟等仿真类应用,CAE场景下的性价比最少提升50%。