总结:不会写代码怎么爬取恒大楼盘?你可以试试这个

优采云 发布时间: 2022-12-17 07:30

  总结:不会写代码怎么爬取恒大楼盘?你可以试试这个

  大家好,我是楠楠的第四马甲,好好生活楠楠

  前几天看到群友的推文,爬取恒大楼盘进行空间映射。

  文章 很好,但我在这里有一个更简单的方法,这很好。所以这次我要介绍一个专门用来获取这类信息的工具【优采云采集器】

  下载链接

  这个案例和我之前发的教学视频很像,大家可以借鉴一下

  数据采集

  复制恒大首页【】

  打开优采云采集器,粘贴链接,聪明的采集就可以了

  

  软件自动识别分页符和字段

  不过这个好像识别不了,没关系,我们可以手动点击

  刚开始 采集

  这是data采集运行界面

  Oak,采集结束了,一共580条数据

  然后就可以导出到excel了

  

  数据在excel中显示如下

  地址到经纬度

  我有两种方法。一种是调用本博主写的百度地图api。我以前讲过。

  第二种方法也是我之前讲过的,使用网站【】

  两种方法结果相似,但要注意去异常值和坐标转换

  关于数据分析,我推荐tableau来进行分析和可视化。说到这里,我会抱怨的。mmp破解版2020无法显示图表,2019破解版无法显示地图。

  一堆博主说完美破解,搞了半天,能打开软件就是完美破解了。我会在找到好用的破解版后更新这方面的教程。我去,怎么又给自己挖坑了?

  福利:算法打卡 Day22 跳表 skipList

  今天学习了一种全新的数据结构,skip table。

  可以有效提高链表索引的时间,时间复杂度从O(n)降低到O(logn)。

  具体方法:下面链接有详细解释,

  借用这个文章的一张图可以有效的说明这个数据结构。

  在原链表上,建立一级索引,访问原链表的节点1、3、5、7……,跳过一位,在一级索引的基础上建立二级索引——级索引,访问一级索引的节点1、3、5、7相当于原链表的节点1、5、9……当需要找原链表的一个元素时链表,直接从高级索引链表到Indexing有点像二分查找,时间可以O(logn)。C++代码链接如下:

  github中的代码在我的环境下编译不正确,我在本地稍作修改后的版本如下:

  #include

#include

#include

#include

#include

#include

#include

using namespace std;

/**

* 跳表的一种实现方法。

* 跳表中存储的是正整数,并且存储的是不重复的。

*

* 跳表的C++版本.

* 翻译JAVA版本 原作者 Author:ZHENG

*

* Author:puhuaqiang

*

* 跳表结构:

*

* 第K级 1 9

* 第K-1级 1 5 9

* 第K-2级 1 3 5 7 9

* ... ....

* 第0级(原始链表) 1 2 3 4 5 6 7 8 9

*/

const int MAX_LEVEL = 16;

/**

* @brief 节点

*/

class CNode

{

public:

CNode();

~CNode();

std::string toString();

/**

* @brief 获取索引链表

*/

CNode** GetIdxList();

/**

* @brief 设置数据

*/

void SetData(int v);

/**

* @brief 获取数据

*/

int GetData();

/**

* @brief 设置最大索引级别

*/

void SetLevel(int l);

private:

/**当前节点的值*/

int m_data;

/**

* 当前节点的每个等级的下一个节点.

* 第2级 N1 N2

* 第1级 N1 N2

* 如果N1是本节点,则 m_lpForwards[x] 保存的是N2

*

* [0] 就是原始链表.

*/

CNode* m_lpForwards[MAX_LEVEL];

/**当前节点的所在的最大索引级别*/

int m_iMaxLevel;

};

/**

* @brief 跳表

*/

class CSkipList

{

public:

CSkipList();

~CSkipList();

/**

* @brief 查找指定的值的节点

* @param v 正整数

*/

CNode* Find(int v);

/**

* @brief 插入指定的值

* @param v 正整数

*/

void Insert(int v);

/**

* @brief 删除指定的值的节点

* @param v 正整数

*/

int Delete(int v);

void PrintAll();

/**

* @brief 打印跳表结构

* @param l 等于-1时打印所有级别的结构 >=0时打印指定级别的结构

*/

void PrintAll(int l);

/**

* @brief 插入节点时,得到插入K级的随机函数

* @return K

*/

int RandomLevel();

private:

int levelCount;

/**

* 链表

* 带头/哨所(节点)

*/

CNode* m_lpHead;

};

int main()

<p>

{

CSkipList skipList;

/// 插入原始值

for (int i = 1; i GetData() GetIdxList()[i];

}

lpUpdateNode[i] = lpFind;

}

/**

* lpFind 是小于v的节点, lpFind的下一个节点就等于或大于v的节点

*/

if ((NULL != lpFind->GetIdxList()[0]) && (lpFind->GetIdxList()[0]->GetData() == v)) {

for (int i = levelCount - 1; i >= 0; --i) {

if ((NULL != lpUpdateNode[i]->GetIdxList()[i]) && (v == lpUpdateNode[i]->GetIdxList()[i]->GetData())) {

lpUpdateNode[i]->GetIdxList()[i] = lpUpdateNode[i]->GetIdxList()[i]->GetIdxList()[i];

ret = 0;

}

}

}

return ret;

}

void CSkipList::PrintAll()

{

CNode* lpNode = m_lpHead;

while (NULL != lpNode->GetIdxList()[0]) {

std::cout toString().data() = 0; --i) {

CNode* lpNode = m_lpHead;

std::cout

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线