PHP纯手写正则爬取星座屋网站星座运势数据

news/2024/4/28 21:14:00/文章来源:https://blog.csdn.net/weixin_33968104/article/details/88860503

星座屋(http://www.xzw.com/fortune/)运势界面:
clipboard.png

最终爬取数据结果展示在APP上的效果:
图片描述

图片描述

下面就是使用正则实现的代码,是自己一年多前花了半天时间写的。现在想来,如果使用Scrapy或者phpspider只用几行代码就搞定了,不用这么费力气了~

<?php
/**
* 星座运势
* author: pengfei
* http://www.xzw.com/fortune/aries/ 今日
* http://www.xzw.com/fortune/aries/1.html 明日
* http://www.xzw.com/fortune/aries/2.html 本周
* http://www.xzw.com/fortune/aries/3.html 本月
* http://www.xzw.com/fortune/aries/4.html 今年
* http://www.xzw.com/fortune/aries/5.html 爱情
*/
define('IN_FTE', true);
require(dirname(__FILE__) . '/includes/init.php');
date_default_timezone_set('Asia/Shanghai');
$json  = new JSON();/*
$constellation = array ('白羊座' => array('aries', '03/21-04/19'),'金牛座' => array('taurus', '04/20-05/20'),'双子座' => array('gemini', '05/21-06/21'),'巨蟹座' => array('cancer', '06/22-07/22'),'狮子座' => array('leo', '07/23-08/22'),'处女座' => array('virgo', '08/23-09/22'),'天秤座' => array('libra', '09/23-10/23'),'天蝎座' => array('scorpio', '10/24-11/22'),'射手座' => array('sagittarius', '11/23-12/21'),'魔羯座' => array('capricorn', '12/22-01/19'),'水瓶座' => array('aquarius', '01/20-02/18'),'双鱼座' => array('pisces', '02/19-03/20')
);*/$constellation = isset($_REQUEST['xingzuo']) && !empty($_REQUEST['xingzuo']) ? trim($_REQUEST['xingzuo']) : null;
$category = isset($_REQUEST['category']) && !empty($_REQUEST['category']) ? intval($_REQUEST['category']) : null;$all_xingzuo = array('aries','taurus','gemini','cancer','leo','virgo','libra','scorpio','sagittarius','capricorn','aquarius','pisces');
$all_category = array(0,1,2,3,4,5);
if(!in_array($constellation, $all_xingzuo) || !in_array($category, $all_category)){exit('Params error');
}$domain = 'http://www.xzw.com/fortune/';
$apiUrl = '';
if($category){$apiUrl = $domain.$constellation.'/'.$category.'.html';
} else {$apiUrl = $domain.$constellation.'/';
}header("Content-type: text/html; charset=utf-8");
function getFortuneData($url){$fortune_data = array();$data = file_get_contents($url);$data = mb_convert_encoding($data, 'utf-8', 'gbk');preg_match('/<div class="c_main">(.*)<\/div>/ism', $data, $div_c_main);preg_match('/<dl>(.*?)<\/dl>/ism', $div_c_main[1], $dl);preg_match('/<dd>(.*?)<\/dd>/ism', $dl[1], $dd);preg_match('/<ul>(.*?)<\/ul>/ism', $dd[1], $ul);$ul = str_replace('<label>', '{label}', $ul[1]);$ul = preg_replace('/<span[^>]*?>/ism', '', $ul);$ul = preg_replace('/<li[^>]*>/ism', '', $ul);$ul = preg_replace('/<\/label>/ism', '', $ul);$ul = preg_replace('/<\/li>/ism', '', $ul);//$ul = preg_replace('/\s+/','',$ul);$ul_arr = explode('{label}', $ul);array_shift($ul_arr);foreach ($ul_arr as $key => &$li) {//preg_match_all("/([\x81-\xfe][\x40-\xfe])+/", $li, $matches);//转换编码 $matches[1][0]表示":"preg_match('/<em style="width:(\d{1,}).*">/ism', $li, $width);if(!empty($width)){$li = explode(":",$li);$li['label'] = preg_replace('/<em[^>]*?>/ism', '', $li[0]);$li['value'] = sprintf('%0.2f', floatval($width[1]/80));unset($li[0]);unset($li[1]);//$val[1] = $width[1]/16;} else {$li = explode(":",$li);$li['label'] = $li[0];$li['value'] = $li[1];unset($li[0]);unset($li[1]);}}$fortune_data['ul'] = $ul_arr;//获取c_contpreg_match('/<div class="c_cont">(.*?)<\/div>/ism', $data, $cont);$p_cont = preg_replace('/<strong[^>]*?>/ism', '', $cont[1]);$p_cont = str_replace('<span>', '{span}', $p_cont);$p_cont = str_replace('<p>', '{p}', $p_cont);$p_cont = preg_replace("'<[/!]*?[^<>]*?>'si","",$p_cont);$p_cont = preg_replace('/\s+/','',$p_cont);//$p_cont = preg_replace("'([rn])[s]+'","",$p_cont);$p_cont = str_replace('<div class="z">', '', $p_cont);$p_cont_arr = explode('{p}',$p_cont);array_shift($p_cont_arr);foreach ($p_cont_arr as $key => $val) {$temp = explode('{span}', $val);$temp_arr['label'] = $temp[0];$temp_arr['value'] = $temp[1]; $fortune_data['cont'][] = $temp_arr;unset($temp);}return $fortune_data;
}$write_result = '';//写入状态 默认为空表示不写入
$local_data = '';
$result = array();
$fileName = !empty($category) ? $constellation.'-'.$category.'.php' : $constellation.'.php';
$fortune_data_path = 'fortune_data/'.$fileName;if(file_exists($fortune_data_path)){$local_data = @file_get_contents('fortune_data/'.$fileName);
}if (!empty($local_data)) {$filemtime = filemtime($fortune_data_path);//判断缓存时间是否在当天内产生$todayStart = mktime(0, 0, 0, date("m"), date("d"), date("Y"));if($filemtime < $todayStart){ //缓存过期$data = getFortuneData($apiUrl);$write_result = write_fortune_cache($data, $fileName);if(empty($data)){$result['result'] = -1;$result['msg'] = '数据抓取失败!'; $result['write_result'] = $write_result;$result['data'] = array();exit($json->encode($result));}} else {$data = unserialize($local_data);}$result['result'] = 0;$result['msg'] = 'success';$result['write_result'] = $write_result;$result['data'] = $data;exit($json->encode($result));
} else {$data = getFortuneData($apiUrl);if(!empty($data)){$write_result = write_fortune_cache($data, $fileName);$result['result'] = 0;$result['msg'] = 'success'; $result['write_result'] = $write_result;$result['data'] = $data;exit($json->encode($result));} else {$result['result'] = -1;$result['msg'] = '数据抓取失败!'; $result['write_result'] = $write_result;$result['data'] = array();exit($json->encode($result));}
}function write_fortune_cache($data, $fileName){$fp = fopen('./fortune_data/'.$fileName, 'w+') or die('fortune_data/'.$fileName.'不存在!');$fw = fwrite($fp, serialize($data));if($fw){$write_result = 'success';} else {$write_result = 'fail';}fclose($fp);return $write_result;
}
?>

End

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web服务器的网站选项,Web服务器配置方法(2)

在IIS中创建Web网站打开“Internet 信息服务管理器”&#xff0c;在目录树的“网站”上单击右键&#xff0c;在右键菜单中选择“新建→网站”&#xff0c;弹出“网站创建向导”&#xff1a;图6图7网站描述就是网站的名字&#xff0c;它会显示在IIS窗口的目录树中&#xff0c;方…

请求的站点不可用或无法找到怎么解决_seo优化怎么做能快速被收录

网站在做seo优化时&#xff0c;不被收录是一件头疼的事&#xff0c;网站不被收录会影响接下来的seo优化工作&#xff0c;无法做关键词优化&#xff0c;但是网站被收录都有一个时间过程&#xff0c;很少有网站秒收录的&#xff0c;快的也需要3-5天时间&#xff0c;怎么样才能快速…

如何清除计算机搜索框内的搜索历史记录,如何清除搜索框中的网站访问历史记录...

本文教你如何防止在网页浏览器地址栏中输入内容时显示匹配结果。记住&#xff0c;Mac 和 iPhone 平台上的 Safari 都不会保留表单数据&#xff0c;所以如果使用 Safari&#xff0c;就不需要担心这个问题。如果你想删除掉浏览历史记录中的所有网站&#xff0c;那就需要清除浏览历…

浅谈Joomla网站优化

2019独角兽企业重金招聘Python工程师标准>>> 选择用Joomla开源系统建设网站的人有很大概率都是看中SEO优化了吧&#xff0c;说到网站搜索引擎优化&#xff0c;它涉及到很多方面&#xff0c;这是一个很复杂的工作。接下来我谈到优化网站时你应该考虑的几项重要因素。…

零基础搭建PHP本地环境并安装WordPress网站(图文指导)...

搭建PHP本地环境前言 以前在大学课堂上学过一点JAVA, PHP. 因为那时是零基础&#xff0c;需要自己搭建APACH, MYSQL, PHPADMIN过程挺烦的&#xff0c;本地环境都不知道是啥&#xff0c;但是做出来结果却很高兴。出来后也做过网站&#xff0c;但是很久不弄就忘记了&#xff0c;我…

LAMP架构搭建网站商城

LAMP架构搭建网站商城LinuxApacheMysql/MariaDBPerl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件&#xff0c;共同组成了一个强大的Web应用程序平台一、安装需要的软件包[rootw-163 ~]# yum install httpdmysql-server mysql php php-mysql -y二、启动LAMP相关服务…

jitter 如何优化网络_爱帮网络推广|如何选择符合企业要求的SEO优化公司?

很多企业花了精力制作出一个企业网站&#xff0c;但是不够重视SEO优化&#xff0c;反而也没有得到好的网络推广效果。想要更好的推广效果&#xff0c;好的SEO优化是必不可少的&#xff01;初期搭建一个SEO团队对于企业来说负担太大&#xff0c;也可以考虑选择专业的SEO团队来帮…

网站网络带宽 和 流量的区别

为什么80%的码农都做不了架构师&#xff1f;>>> 关于带宽 和 流量 一直分的不是很清楚&#xff0c;最近查看了详细解释&#xff0c;这里按照我自己的理解做些备注 脑补基础: 带宽单位是&#xff1a;Kbit/s,Mbit/s,Gbit/s 流量单位是&#xff1a;KB,MB,GB 1Byte …

打不开Godaddy.com网站和域名无法解析的解决方法

为什么80%的码农都做不了架构师&#xff1f;>>> 国内电信和联通(网通)再次出手&#xff0c;屏蔽了Godaddy.com的部分DNS服务器&#xff0c;同时导致Godaddy官网在国内部分地区无法打开。老当给您解决方法 无法打开 Godaddy.com 官方的解决方法&#xff1a; 方法一、…

大型网站技术架构(五)网站高可用架构

2019独角兽企业重金招聘Python工程师标准>>> 网站的可用性&#xff08;Avaliability&#xff09;描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间&#xff08;故障时间&#xff09;故障修复时间点-故障发现&#xff08;报告&#xff09;时间点…

docker系列-运行nginx静态网站

nginx 是一个web服务器,需要持久运行的服务器,而且我们一般选择在后台运行.拉取nginx镜像[rootxinsz10 ~]# docker pull hub.c.163.com/library/nginx:latestlatest: Pulling from library/nginx5de4b4d551f8: Pull complete d4b36a5e9443: Pull complete 0af1f0713557: Pull c…

从运维角度看中大型网站架构的演变之路

前言网上有很多文章类似于我今天要分享的课程&#xff0c;有架构师写的&#xff0c;有运维写的&#xff0c;还有开发些的&#xff0c;偏重点都不同&#xff0c;今天我以咱们运维角度全面讲解。一个成熟的网站架构并不是一开始设计就具备高可用、高伸缩、高性能等特性的&#xf…

css会对网站排名有影响吗,网站是如何推广的?DIVCSS网页相似太多影响排名?

网站是如何推广的&#xff1f;DIVCSS网页相似太多影响排名&#xff1f;2021-03-07 10:13:50DIVCSS网页布局有益于SEO优化排名&#xff0c;“网站是如何推广的”&#xff0c;搜索引擎一般不会爬到三层以上的表格嵌套&#xff0c;这一点一直没有得到搜索引擎相关官方网络的证实。…

apache http server 停止工作_(二)http协议的网站装ssl升级成https

最终目标&#xff1a;微信小程序要想上线 必须内部所有域名都是https&#xff0c;比如网络图片&#xff0c;比如后端接口&#xff0c;比如其他链接。问&#xff1a;既然https://minihome.top/能直接访问了&#xff0c;那我用eggjs(node)写的后端接口是不是就可以正常访问了&…

【linux】在阿里云服务器上部署网站 WeCenter

文章目录前言操作环境及以有的架构上传WeCenter软件包解压并传至根目录安装weCenter1. 进入阿里云后台&#xff0c;选择域名解析二级域名 bbs.zmkjedu.com3. 设置apache的配置文件4. 开始安装5. 全部通过后&#xff0c;点击下一步&#xff1a;6. 添加管理员7. 安装成功&#xf…

【Linux】网站后台设置及管理

文章目录1. 进入网站后台选择管理&#xff0c;登陆2. 修改全局设置1&#xff09; 站点信息修改2&#xff09; 注册访问修改3&#xff09; 内容设置3. 把网站添加到主网站上去总结1. 进入网站后台选择管理&#xff0c;登陆 从浏览器输入&#xff1a;bbs.zmkjedu.com 2. 修改全局…

【Linux】ab命令实现网站性能压力测试

文章目录ab命令介绍ab命令的安装ab命令的参数使用举例1. 使用gaosh-64服务器对gaosh-1服务器进行压测&#xff0c;模拟10个用户&#xff0c;对百度首页发起1000次请求2. 压测www.zmkjedu.com压测时的信息详解总结ab命令介绍 ApacheBench(即ab)通常用来做网站性能压力测试&…

【Linux】宝塔堡垒机上线网站初体验

文章目录安装环境&#xff1a;官网提供的一键部署方式安装网站测试1. 先上传安装wordpress2.从终端进入并安装3. 找到上传的包4. 解压并加权限5. 线上安装wordpress6. 创建wordpress数据库7. 登陆总结安装环境&#xff1a; 安装要求&#xff1a; 内存&#xff1a;512M以上&am…

自动seo网站源码_做了利于SEO优化的网站建设,企业的网站就能自动排名靠前?...

这些年&#xff0c;eGoBest发现很多人做网站建设有个错误的观点&#xff0c;尤其是做了营销型品牌网站的企业&#xff0c;都以为只要做一个利于SEO优化好的网站&#xff0c;&#xff0c;Google和百度等搜索引擎就能自动排名靠前&#xff0c;这都是错误的观点&#xff0c;下面&a…

新手搭建网站后视频资源在网站上是如何存储的?

前言 本文的起因是一个学员搭建好了一个视频文章&#xff0c;主要做视频的录制&#xff0c;每个视频在10-20M左右&#xff0c;每月产生10G左右的视频素材&#xff0c;想看看怎么存储。 问题解析 作为个人站&#xff0c;没必要花太多钱&#xff0c; 有几种方案可以实施 免费方…