用php实现对网页的抓取,及信息的收集,其实就是爬数据,具体实现步骤如下,首先应引入两个文件curl_html_get.php和save_file.php文件,两个文件具体代码是这样的curl_html_get.php内代码为

<?php
function curl_get_file_contents($url)
{
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $url);
$contents = curl_exec($c);
curl_close($c);
 
if ($contents)
return $contents;
else
return FALSE;
}
?>
save_file.php文件内容是
<?php
/**
* 连续创建目录
*
* @param string $dir 目录字符串
* @param int $mode 权限数字
* @return boolean
*/
function make_dir($dir, $mode = "0777") {
if (!$dir)
return false;
if(!file_exists($dir)) {
return mkdir($dir,$mode,true);
} else {
return true;
}
}
/**
* 保存文件
*
* @param string $fileName 文件名(含相对路径)
* @param string $text 文件内容
* @return boolean
*/
function save_file($filename, $text) {
if (!$filename || !$text)
return false;
$dirname = dirname($filename);
if (make_dir($dirname)) {
// file_put_contents($filename, $text, FILE_APPEND);
file_put_contents($filename, $text);
// if (is_resource($fp = fopen($filename, "w+"))) {
// if (@fwrite($fp, $text)) {
// fclose($fp);
// return true;
// } else {
// fclose($fp);
// return false;
// }
// }
}
return false;
}
?>
其实就是一个是获取网页内容的,另一个是创建文件的。
然后就是PHP代码了,自己定义一个函数 函数内代码基本是这样的

echo "==================start=======================<br />";
// 1、获取网页
$path = THIS_PATH . "download";
$url = "http://10.maigoo.com/list_1187.html";
$pathinfo = pathinfo($url);
$html_pathname = $path . DS;
$html_filename = $html_pathname . "list_1187.htm";
 
if (!file_exists($html_filename)) {
$text = curl_get_file_contents($url);
save_file($html_filename, $text);
} else {
$text = file_get_contents($html_filename);
}
// 2、获取区域
//start pos
$start = '<div class="b-brand-nlist hoverdetail">';
//end pos
$end = '<div id="copyright">';
$pos_start = strpos($text, $start);
$pos_end = strpos($text, $end, $pos_start);
$pos_end += strlen($end);
$content = substr($text, $pos_start, $pos_end-$pos_start);
save_file($html_pathname."list_1187.html", $content);
 
// 3、获取所有的一级
$pattern = '@<div class="aclist">.*<div class="clear"></div>@Usi';
if (!preg_match_all($pattern, $content, $matches)) {
die("===============not match anything===================<");
}
echo "=========================================<br />";
$index = 0;
foreach ($matches[0] as $pinpai_cate) {
save_file($html_pathname. $index . ".html", $pinpai_cate);
 
// 获得一级分类 url 和 name
get_level1_url_and_name($pinpai_cate, $cate1_url, $cate1_name);
// echo "==================$一个品牌=======================<br />";
$pattern = '@<li addbg="#400143".*</li>@Usi';
if (preg_match_all($pattern, $content, $matches)) {
foreach($matches[0] as $one_brand);
 
}
}
echo "==================end=======================<br />";
}
 
基本原理就是先获取下载网页到本地,然后截取,最后用正则匹配。自己做得过程中没有对代码进行调优,导致代码太长,重复的地方太多,若截取的地方用正则还是无法判断,或者说区域有很多重复点,就需要再次截取接着排除干扰,比较繁琐,另外需要多写函数,把所有代码优化之后才能更深入提高自己水平。

用PHP获取网页上的信息相对于xpath效率低点的更多相关文章

  1. 获取网页上数据(图片、文字、视频)-b

    Demo地址:http://download.csdn.net/detail/u012881779/8831835 获取网页上所有图片.获取所有html.获取网页title.获取网页内容文字... . ...

  2. 如何获取网页上的LOGO

    一般公司网页上的图片都会禁止右键另存为,用截图工具接下来的图会带背景色,PS成背景透明有点费时间. 用Google Chrome 或Firefox 打开目标网页,右键点击审查元素,将鼠标放在图片上,一 ...

  3. 我的第一个爬虫程序:利用Python抓取网页上的信息

    题外话 我第一次听说Python是在大二的时候,那个时候C语言都没有学好,于是就没有心思学其他的编程语言.现在,我的毕业设计要用到爬虫技术,在网上搜索了一下,Python语言在爬虫技术这方面获得一致好 ...

  4. Thinkphp5获取文件上传信息

    Thinkphp5内置有处理文件上传的方法,因在开发文档没有找到获取上传文件基本信息的说明,故在这里做一下记录. $file = request()->file('input类型为file的na ...

  5. Android获取网页上的图片的代码

    public Bitmap getWebBitmap(String imgUrl) { Bitmap bitmap =null; try { InputStream inputStream = nul ...

  6. php用get_meta_tags轻松获取网页的meta信息

    之前没发现php还有这个函数,get_meta_tags()直接就可以获取文件中meta标签的属性值,返回数组: <?php $metas = get_meta_tags('http://www ...

  7. 获取网页上的所有QQ号码,并生成exel报表

    需要的jar如下: package jsoup.zr.com.utils; /** * * @author LF * */ public class Constant { /** * 网站链接地址ַ ...

  8. js获取网页上选中的部分,包含html代码

    function getSelectedContents(){     if (window.getSelection) { //chrome,firefox,opera         var ra ...

  9. C#获取网页信息并存入数据库

    1,获取以及商品分类信息 给一网页获取网页上商品信息的分类 using Skay.WebBot; using System; using System.Collections.Generic; usi ...

随机推荐

  1. numpy basic sheatsheet

    NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库.NumPy 通常与 SciPy(Scien ...

  2. stand up meeting 11/27/2015-11/29/2015

    part 组员 今日工作 工作耗时/h 明日计划 工作耗时/h UI 冯晓云   确定释义显示方案并进行代码实现:     4  完成UI设计的各项动能按钮的代码实现  6 数据库 朱玉影  导入了4 ...

  3. Problem D. Ice Cream Tower

    题解:二分加贪心,,,二分答案,然后进行判断,判断的时候,首先给每一组配一个最大的球,然后在向每一组里面填球,注意填球的时候要按组进行,每一组先填一个,然后更新每一组内的最小值,方便下一次寻找. #i ...

  4. Python生成一维码

    参考页面 https://pypi.org/project/python-barcode/ 利用python-barcode的库 一.安装python-barcode库 #安装前提条件库 pip in ...

  5. [Abp vNext 入坑分享] - 2.简化项目结构

    一.简要说明 本篇文章根据我自己的需要对项目结果进行简化,让项目结构更符合我自己的要求,同时让项目跑起来.仅供参考 二.具体步骤 2.1卸载掉对我来说目前使用不上的项目,identityserver, ...

  6. windows下常用快捷指令记忆

    快速打开环境变量窗口 sysdm.cpl --系统设置 快速打开远程桌面程序 mstsc ---Microsoft terminal services client 快速打开事件查看器 eventvw ...

  7. HTTPoxy漏洞(CVE-2016-5385)复现记录

    漏洞介绍: httpoxy是cgi中的一个环境变量:而服务器和CGI程序之间通信,一般是通过进程的环境变量和管道. CGI介绍 CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下:CGI(C ...

  8. windows下部署.netcore+docker系列一(安装linux (ubuntu18.4))

    1 下载 虚拟机和 linux 系统 版本是 ubuntu 链接:https://pan.baidu.com/s/1jTxdysoyOhSWD-Ea-7JIbg 提取码:iiad 2  首先要安装 虚 ...

  9. Elasticsearch 集群部署

    本文部署环境 $ cat /etc/redhat-release CentOS Linux release (Core) 部署前系统优化 $ /etc/security/limits.conf roo ...

  10. XSS Challenge(1)

    XSS Challenges http://xss-quiz.int21h.jp/ Stage #1 注入alert(document.domain),先试一试输入后会返回什么: 返回在标签中,直接尝 ...