用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. windows编译动态链接库,dll+lib的形式

    之前一直在linux上做开发,没怎么关注过windows上如何编译动态链接库.不过一直存疑,为什么windows上的动态链接库是.dll配合.lib使用的,这个又是怎么生成的呢,通过一段时间的查资料和 ...

  2. fasttext的使用,预料格式,调用方法

    数据格式:分词后的句子+\t__label__+标签 fasttext_model.py from fasttext import FastText import numpy as np def ge ...

  3. 【认证与授权】2、基于session的认证方式

    这一篇将通过一个简单的web项目实现基于Session的认证授权方式,也是以往传统项目的做法. 先来复习一下流程 用户认证通过以后,在服务端生成用户相关的数据保存在当前会话(Session)中,发给客 ...

  4. python实现秒杀商品的微信自动提醒功能(附代码)

    技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 工具:需要两个微信号,这两个微信号互为好友 如果你处于想学Python或者正在学习Python,Python的教程不少了吧,但是是最新的 ...

  5. 高质量动漫实时画质增强器Anime4K在mpv上的配置

    Anime4K地址 https://github.com/bloc97/Anime4K mpv地址  https://mpv.io/   这个要错峰下载,网速不太好 在C盘用户\..\AppData\ ...

  6. ES6中不得不说的关键字const

    上一节讲了let关键字,它是用来声明一个变量,只在块级作用域起作用.这一节我们来学习ES6新增的另一个关键字const. const 的作用 const是constant(常量)的缩写,const和 ...

  7. 2019-2020-1 20199329《Linux内核原理与分析》第七周作业

    <Linux内核原理与分析>第七周作业 一.本周内容概述: 对Linux系统如何创建一个新进程进行追踪 分析Linux内核创建一个新进程的过程 二.本周学习内容: 1.学习进程的描述 操作 ...

  8. Ubuntu 安装 Qt, 安装辅助软件

    sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev sudo apt-get install gcc g++ sudo apt-get inst ...

  9. opencv-2-VS2017与QT显示图像

    opencv-2-VS2017与QT显示图像 opencvqtVSC++ 目的 使用 VS 构建第一个 opencv 程序 使用 QT 构建 第一个 opencv 程序 VS 导入 QT 程序 开始 ...

  10. ip-端口-协议等基本概念

    互联网上的计算机,都会有一个唯一的32位的地址——ip地址.我们访问服务器,就必须通过这个ip地址.   局域网里也有预留的ip地址:192/10/172开头.局域网里的ip地址也是唯一的.   NA ...