开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 993|回复: 13
收起左侧

[其它源码] [我的爬虫日记07]PHP爬取全国房价,最低鹤岗,最高北京!

[复制链接]
发表于 2024-11-10 18:14:52 | 显示全部楼层 |阅读模式   辽宁省沈阳市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
[PHP] 纯文本查看 复制代码
<?php
include_once "./lib/func.php";
include_once "./lib/PHPExcel.php";

# 取省内城市排行榜
function get_phb(string $province_id,string $province_name):array{

    log_print("开始获取{$province_name}...",true);

    $url = "https://www.58.com/fangjiawang/".$province_id;
    $headers = [
        "user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
    ];

    $ret_html = get_data($url,$headers);
    $left_phb = "房价排行榜";
    $right_phb = "</li></ul>";
    $phb_html = get_mid_text($ret_html,$left_phb,$right_phb);

    $left_city = "<b";
    $right_city = "em>";
    $city_html_arr = get_mid_text_batch($phb_html,$left_city,$right_city);

    $city = [
        "province_name" => "",
        "city_name" => "",
        "price"=>"",
        "up_and_down"=>""
    ];
    $city_list = [];
    foreach($city_html_arr as $val){
        $left_mark = ">";
        $right_mark = "<";
        $row_arr = get_mid_text_batch($val,$left_mark,$right_mark);
        $city["province_name"] = $province_name;
        $city["city_name"] = str_replace("房价", "", $row_arr[0]);;
        $city["price"] = $row_arr[2];
        $city["up_and_down"] = $row_arr[4];

        log_print($city["province_name"]."|".$city["city_name"]."|".$city["price"]."|".$city["up_and_down"],true);

        array_push($city_list,$city);
    }
    return $city_list;
}

# 去除汉字
function removeChinese(string $string):string {
    return trim(preg_replace('/[\x{4e00}-\x{9fff}]/u', '', $string));
}

# 取直辖市排行榜
function get_zxs_phb(string $city_id,string $city_name,string $province_name):array{

    log_print("开始获取{$city_name}...",true);

    $url = "https://www.58.com/fangjiawang/".$city_id;
    $headers = [
        "user-agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 Edg/130.0.0.0"
    ];

    $ret_html = get_data($url,$headers);

    $left_zst = "二手房均价价格";
    $right_zst = "</div>";
    $zst_html = get_mid_text($ret_html,$left_zst,$right_zst);
    $zst_html = strip_tags($zst_html);
    $price = trim(get_left_text($zst_html,"元"));
    $up_down = removeChinese(get_right_text($zst_html,"比上月"));
   
    $city = [
        "province_name" => $province_name,
        "city_name" => $city_name,
        "price"=> $price."元/㎡",
        "up_and_down"=> empty($up_down)?"--":$up_down
    ];

    log_print($city["province_name"]."|".$city["city_name"]."|".$city["price"]."|".$city["up_and_down"],true);

    return $city;
}

# 导出Excel
function house_price_to_excel(array $city_list, string $file_name):void
{
    log_print("开始导出...",true);

    // 创建操作对象
    $objPHPExcel = new PHPExcel();
    $objSheet = $objPHPExcel->getActiveSheet();

    // 设置表头
    $objSheet->setCellValue('A1', '省份');
    $objSheet->setCellValue('B1', '城市');
    $objSheet->setCellValue('C1', '房价');
    $objSheet->setCellValue('D1', '升降');

    // 设置内容
    for ($i = 0; $i < count($city_list); $i++) {
        $w = $i + 2;
        $city = $city_list[$i];
        $objSheet->setCellValue("A{$w}", $city["province_name"]);
        $objSheet->setCellValue("B{$w}", $city["city_name"]);
        $objSheet->setCellValue("C{$w}", $city["price"]);
        $objSheet->setCellValue("D{$w}", $city["up_and_down"]);
        log_print($city["city_name"]."->房价信息写出成功",true);
    }

    // 保存
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
    @$objWriter->save($file_name);
    log_print("任务完成",true);
}


# 主函数
function main():void{
    $province_arr = [
        "安徽" => "sheng-2024-1",
        "福建" => "sheng-2024-2",
        "甘肃" => "sheng-2024-3",
        "广东" => "sheng-2024-4",
        "广西" => "sheng-2024-5",
        "贵州" => "sheng-2024-6",
        "海南" => "sheng-2024-7",
        "河北" => "sheng-2024-8",
        "黑龙江" => "sheng-2024-9",
        "河南" => "sheng-2024-10",
        "湖北" => "sheng-2024-11",
        "湖南" => "sheng-2024-12",
        "江苏" => "sheng-2024-13",
        "江西" => "sheng-2024-14",
        "吉林" => "sheng-2024-15",
        "辽宁" => "sheng-2024-16",
        "内蒙古" => "sheng-2024-17",
        "宁夏" => "sheng-2024-18",
        "青海" => "sheng-2024-19",
        "陕西" => "sheng-2024-20",
        "山东" => "sheng-2024-21",
        "山西" => "sheng-2024-22",
        "四川" => "sheng-2024-23",
        "新疆" => "sheng-2024-24",
        "西藏" => "sheng-2024-25",
        "云南" => "sheng-2024-26",
        "浙江" => "sheng-2024-27",
    ];
    
    $zxs_arr = [
        "北京" => "shi-2024-100",
        "上海" => "shi-2024-101",
        "天津" => "shi-2024-105",
        "重庆" => "shi-2024-106"
    ];
    
    $city_list = [];

    // 遍历省份
    foreach($province_arr as $province_name => $province_id) {
        $list = get_phb($province_id,$province_name);
        foreach($list as $city){
            array_push($city_list,$city);
        }
        sleep(2);
    }

    // 遍历直辖市
    foreach($zxs_arr as $city_name => $city_id){
        $city = get_zxs_phb($city_id,$city_name,"直辖市");
        array_push($city_list,$city);
        sleep(2);
    }

    // 导出excel
    house_price_to_excel($city_list,"全国房价.xls");
}


// ++++++++++++++++++++++++++入口++++++++++++++++++++++++++
if (php_sapi_name() === 'cli') {
    main();
} else {
    log_print("请在命令行模型下运行!",true,2);
}

全国房价

全国房价


价格最低10个城市

价格最低

价格最低


价格最高10个城市

价格最高

价格最高



全国房价.rar (959.58 KB, 下载次数: 17)

点评

大哥有爬到县的吗?   浙江省丽水市  发表于 2024-11-11 06:46

评分

参与人数 3好评 +1 精币 +5 收起 理由
wa690602724 + 1 感谢分享,很给力!~
多多帅吧 + 1 感谢你的支持,精易有你更精彩
airaz + 1 + 3 YYDS~!

查看全部评分


签到天数: 9 天

发表于 2024-12-4 03:20:51 | 显示全部楼层   北京市北京市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 12 天

发表于 2024-11-14 13:49:04 | 显示全部楼层   四川省成都市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

签到天数: 9 天

发表于 2024-11-12 22:54:05 | 显示全部楼层   陕西省西安市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:20% (1/5)
发表于 2024-11-12 15:19:18 | 显示全部楼层   安徽省六安市
学习了.清楚最新房价
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
发表于 2024-11-11 22:51:51 | 显示全部楼层   江西省萍乡市
鹤岗!  感觉还不错
回复 支持 反对

使用道具 举报

结帖率:100% (7/7)

签到天数: 15 天

发表于 2024-11-11 09:45:02 | 显示全部楼层   湖北省武汉市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)

签到天数: 16 天

发表于 2024-11-11 09:21:02 | 显示全部楼层   广西壮族自治区玉林市
感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)

签到天数: 24 天

发表于 2024-11-11 07:52:34 | 显示全部楼层   湖北省十堰市
学习进步!......
回复 支持 反对

使用道具 举报

结帖率:33% (1/3)

签到天数: 3 天

发表于 2024-11-11 07:24:34 | 显示全部楼层   四川省成都市
感谢分享!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表