PHP用CURL爬学校妙思文献图书馆(个人学习日志)

2024-05-25 02:32

本文主要是介绍PHP用CURL爬学校妙思文献图书馆(个人学习日志),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    记录一下,刚学习PHP看到有人用CURL爬数据,就想着怎么做个爬学校图书馆的,学校的网页没有适配移动端很麻烦,每次都只能用电脑查借阅号然后去图书馆找,很不爽,有时候抄错了,还要麻烦图书馆小姐姐诶!

tips:本文curl函数借鉴了csdn以及其他论坛的资料,感谢.

下图是部分截图:

图书馆表单参数很多,我用了俩自定义的其他都是默认,同理。

下面贴代码:

开始找到表单最终提交的地址:tmjs.asp(我用的内网地址)

<!DOCTYPE html>
<html>
<head><title>图书</title><meta charset="utf-8"><meta name="viewport"xxxxxxxxxx,user-scalable=no"><link href="./css/bootstrap.css" rel="stylesheet"><script src="./js/bootstrap.min.js"></script><script src="./js/jquery-3.1.0.min.js"></script><style type="text/css">td:nth-child(1){display: none;}/**去除多余td,正则不会处理的不好**/td:nth-child(3){display: none;}td:nth-child(5){display: none;}</style>
</head>
<body><?php  header("Content-type:text/html;charset=utf-8");  $_cx=urlencode($_POST['_cx_f']);//获取传入书籍名称$_page=$_POST['_page'];//获取设置最大条数$data="page=1&txtWxlx=CN&txtTm=".$_cx."&xxxxxxx";//模拟post构造数据_cx是书名用了url编码$curl="http://172.16.1.43/wxjs/tmjs.asp";//初始化curl模拟提交的地址(内网我用刀的)$ch= curl_init ();  //初始化curl curl_setopt($ch, CURLOPT_URL, $curl);//要从哪个页面获取信息curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//传递数据curl_setopt($ch,CURLOPT_POST,1);//提交方式post
     curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NTxxxxxxxxx;//模拟浏览器curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//设定返回 的数据是否自动显示curl_setopt($ch, CURLOPT_HEADER, 0);//设定是否显示头信息$content = curl_exec($ch);//运行并获取数据curl_close($ch);//关闭请求$str1=preg_replace("/<a[^>]+?href=[\"']?([^\"']+)[\"']?[^>]*>/","",$content );//perl正则表达式去除a标签$pattern="/<td class=\"tdborder4\".*?>.*?<\/td>/ism";//perl模式preg_match_all($pattern, $str1, $n);//按照模式获取数据并传回数组$n//print_r($n);$arr_tmp=$n[0];//三维数组转二维$_books=array_chunk($arr_tmp,6);//二维数组分割,重新分配下标//print_r($_books);//打印数组数据  ?>  <table class="table table-striped table-bordered table-hover"><!--bt框架表格--><thead><tr><th>图书编号</th><th>书籍名称</th><th>出版日期</th></tr></thead><tbody><?php foreach ($_books as $key=>$value) //循环输出{echo "<tr>";echo "<td class=\"_title\">"."$value[0]"."</td>";//书名echo "<td class=\"_title\">"."$value[1]"."</td>";//借阅号echo "<td class=\"_title\">"."$value[4]"."</td>";//出版时间echo "</tr>";}?></tbody></table>
</body>
</html>



 

结束,由于学校图书馆外网突然不能访问,嗯,凉了,没法放到ecs了,穿透又不会(要是有文达校友一起玩!)



这篇关于PHP用CURL爬学校妙思文献图书馆(个人学习日志)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1000232

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

开启mysql的binlog日志步骤详解

《开启mysql的binlog日志步骤详解》:本文主要介绍MySQL5.7版本中二进制日志(bin_log)的配置和使用,文中通过图文及代码介绍的非常详细,需要的朋友可以参考下... 目录1.查看是否开启bin_log2.数据库会把日志放进logs目录中3.查看log日志总结 mysql版本5.71.查看

C++中实现调试日志输出

《C++中实现调试日志输出》在C++编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助... 目录1. 使用 #ifdef _DEBUG 宏2. 加入时间戳:精确到毫秒3.Windows 和 MFC 中的调试日志方法MFC

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

PHP执行php.exe -v命令报错的解决方案

《PHP执行php.exe-v命令报错的解决方案》:本文主要介绍PHP执行php.exe-v命令报错的解决方案,文中通过图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录执行phpandroid.exe -v命令报错解决方案执行php.exe -v命令报错-PHP War

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用