【后续更新】python搜集上海二手房数据

news2024/12/25 0:09:26

 源码如下:

import asyncio
import aiohttp
from lxml import etree
import logging
import datetime
import openpyxl

wb = openpyxl.Workbook()
sheet = wb.active
sheet.append(['房源', '房子信息', '所在区域', '单价', '关注人数和发布时间', '标签'])
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
start = datetime.datetime.now()
class Spider(object):
    def __init__(self):
        self.semaphore = asyncio.Semaphore(6)  # 信号量,控制协程数,防止爬的过快被反爬
        self.header = {
            "Host": "sh.lianjia.com",
            "Referer": "https://sh.lianjia.com/ershoufang/",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
        }

    async def scrape(self, url):
        async with self.semaphore:
            await asyncio.sleep(3)  # 添加等待时间
            session = aiohttp.ClientSession(headers=self.header)
            response = await session.get(url)
            result = await response.text()
            await session.close()
            return result

    async def scrape_index(self, page):
        url = f'https://sh.lianjia.com/ershoufang/pg{page}/'
        text = await self.scrape(url)
        await self.parse(text)

    async def parse(self, text):
        html = etree.HTML(text)
        lis = html.xpath('//*[@id="content"]/div[1]/ul/li')
        for li in lis:
            house_data = li.xpath('.//div[@class="title"]/a/text()')[0]  # 房源
            house_info = li.xpath('.//div[@class="houseInfo"]/text()')[0]  # 房子信息
            address = ' '.join(li.xpath('.//div[@class="positionInfo"]/a/text()'))  # 位置信息
            price = li.xpath('.//div[@class="priceInfo"]/div[2]/span/text()')[0]  # 单价 元/平米
            attention_num = li.xpath('.//div[@class="followInfo"]/text()')[0]  # 关注人数和发布时间
            tag = ' '.join(li.xpath('.//div[@class="tag"]/span/text()'))  # 标签
            sheet.append([house_data, house_info, address, price, attention_num, tag])
            logging.info([house_data, house_info, address, price, attention_num, tag])

    def main(self):
        # 100页的数据
        scrape_index_tasks = [asyncio.ensure_future(self.scrape_index(page)) for page in range(1, 101)]
        loop = asyncio.get_event_loop()
        tasks = asyncio.gather(*scrape_index_tasks)
        loop.run_until_complete(tasks)


if __name__ == '__main__':
    spider = Spider()
    spider.main()
    wb.save('house2.xlsx')
    delta = (datetime.datetime.now() - start).total_seconds()
    print("用时:{:.3f}s".format(delta))

 这个代码会触发链家反*机制,等3个小时就可以继续用。代码后续再修改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2064205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为账号“一键登录”能力让美团用户尽享安全便捷的登录体验

背景 随着全场景智能生态的日益完善,用户面临着众多应用与服务的登录需求, 而繁琐的注册登录流程通常是用户转化的隐形障碍,用户可能因为步骤繁琐、记忆密码困难而中途放弃,导致应用错失潜在用户。其次,高门槛的登录方…

Springcloud从零开始--Eureka(一)

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有…

Java数组06:冒泡排序

本节内容视频链接:Java数组08:冒泡排序_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12J41137hu?p58&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 冒泡排序是一种简单的排序算法,‌它重复地遍历要排序的数列,‌…

day37动态规划+三.Github链接本地仓库

一.动态规划 474.一和零 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 思路:这道题更像是另一种的0-…

Linux编辑器gcc/g++使用及Vim的配置

🌈个人主页:Yui_ 🌈Linux专栏:Linux 🌈C语言笔记专栏:C语言笔记 🌈数据结构专栏:数据结构 🌈C专栏:C 文章目录 1.简单的vim配置1.1 配置文件的位置1.2 常用配…

20 Tkinter Spinbox 组件

Tkinter Spinbox 组件使用指南 Tkinter 的 Spinbox 组件是一个带有上下箭头的输入框,允许用户通过点击箭头来增加或减少数值,或者从下拉列表中选择一个值。它通常用于需要限制用户输入范围的场景。以下是对 Spinbox 组件的详细说明和一个使用案例。 Sp…

linux文件——用户缓冲区——概念深度探索、IO模拟实现

前言:本篇文章主要讲解文件缓冲区。 讲解的方式是通过抛出问题, 然后通过分析问题, 将缓冲区的概念与原理一步一步地讲解。同时, 本节内容在最后一部分还会带友友们模拟实现一下c语言的printf, fprintf接口&#xff0c…

前端面试题 webpack的工作流程

一、流程图 二、重要概念 1.entry入口: Webpack 从配置的入口点开始,分析应用程序的依赖关系 2.output出口: 定义了打包后的文件如何输出,包括文件名和输出路径。 3.loader加载器: Webpack 本身只能处理 JavaScr…

2024 Python3.10 系统入门+进阶(六):random模块常用方法以及元组常用操作详解

目录 一、random模块1.1 random模块快用导航1.2 choice()方法---从非空序列中返回一个随机元素1.3 choices()方法---返回序列的随机元素1.4 randint()方法---获取指定范围的随机整数1.5 random()方法---获取0.0~1.0范围内随机浮点数1.6 randrange()方法---获取指定范围的随机整…

ArcGIS Pro基础:如何将数据和引用地图样式一起打包分享

如上所示,有2个矢量图斑,一个是耕地地块,另一个是范围图斑,如果我们需要把此工程的所有数据以及引用地图一起分享给别人,就可以使用【打包工程】这个工具。 如上所示,在【地理处理】下输入【打包工程】&am…

Excel的使用总结1

目录 1、汇总公式:TEXTJOIN 2、excel中选择某个区域的方法 3、excel中如何在复制的时候,不将公式一起复制过去 4、想要自动填充某个区域的值的方法 1、汇总公式:TEXTJOIN TEXTJOIN 函数 - Microsoft 支持 例:TEXTJOIN("…

Java数组07:稀疏数组

本节内容视频链接: https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p59&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 稀疏数组(‌sparse …

[SWPUCTF 2023 秋季新生赛]UnS3rialize

[SWPUCTF 2023 秋季新生赛]UnS3rialize 点开之后得到一串php代码&#xff1a; <?php highlight_file(__FILE__); error_reporting(0); class NSS {public $cmd;function __invoke(){echo "Congratulations!!!You have learned to construct a POP chain<br/>&q…

CDGA|数据治理为企业赋能价值的几种形式

在当今这个数据驱动的时代&#xff0c;数据已成为企业最宝贵的资产之一&#xff0c;而数据治理作为确保数据质量、安全性、合规性和可访问性的关键过程&#xff0c;正逐步成为企业转型升级、提升竞争力的核心驱动力。数据治理不仅关乎技术层面的优化&#xff0c;更是企业战略实…

【C++ Primer Plus习题】2.5

问题: 解答: #include <iostream> using namespace std;#define CEL_TO_FAH(c) 1.8*c32.0float celToFah(float value) {float fahrenheit CEL_TO_FAH(value);return fahrenheit; }int main() {float celsius 0;cout << "请输入一个摄氏温度的值:";ci…

ARM——驱动——内核编译

一、内核的介绍 Linux内核是Linux操作系统的核心内容&#xff0c;它负责管理系统的硬件资源&#xff0c;并为上层的应用程序提供接口。&#xff08;在上文都有所介绍&#xff09; 功能&#xff1a; 进程管理&#xff1a;内核负责创建、调度、同步和终止进程。它还管理进程间的…

linux应用编程--网络编程(socket编程基础)

介绍&#xff1a;套接字&#xff08;socket&#xff09;是 Linux 下的一种进程间通信机制&#xff08;socket IPC&#xff09;&#xff0c;在前面的内容中已经给大家提到过&#xff0c; 使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信&#xff08;网络通信&#…

Python(PyTorch)多语言图像感知质量指标算法

&#x1f3af;要点 &#x1f3af;算法实现&#xff1a;&#x1f58a;PyTorch单尺度和多尺度质量指标算法 | &#x1f58a;C单尺度质量指标算法 | &#x1f58a;Rust多尺度质量指标算法 | &#x1f58a;LabVIEW单尺度质量指标算法 | &#x1f58a;MATLAB单尺度质量指标算法 | &…

TCP+UDP通信

一、UDP协议 1.1、recvfrom() 参数说明 int sockfd, //socket 的fd void *buf, // 保存数据的一块空间的地址 size_t len, //这块空间的大小 int flags,// 0 默认的接收方式 -----阻塞方式 默认行为是阻塞 MSG_DONTWAIT 不阻塞方式&#xff0c;用他的话代表读的时候是非…

宠物掉毛、有异味怎么办?怎么选择宠物空气净化器?

每当我和朋友提起我家养猫养狗之后&#xff0c;不少朋友总会带着好奇与担忧的表情&#xff0c;半开玩笑地说&#xff1a;“你家里岂不是充满了‘特别’的味道&#xff1f;”这也不怪她们会有这种印象&#xff0c;因为大部分养宠家庭可能都会遇到浮毛满天飞的情况&#xff0c;但…