用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. Springboot系列(七) 集成接口文档swagger,使用,测试

    Springboot 配置接口文档swagger 往期推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配 ...

  2. Windows下如何将一个程序设为开机自启

    1.放在  开始-启动(C:\Users\Qi\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)2.修改注册表[HKEY_L ...

  3. 词向量模型word2vector详解

    目录 前言 1.背景知识 1.1.词向量 1.2.one-hot模型 1.3.word2vec模型 1.3.1.单个单词到单个单词的例子 1.3.2.单个单词到单个单词的推导 2.CBOW模型 3.s ...

  4. C++枚举算法

    枚举算法 什么是枚举? 枚举,顾名思义,就是用最笨的方法,去解决问题(暴力枚举),一个集的枚举是列出某些有穷序列集的所有成员的程序,或者是一种特定类型对象的计数.这两种类型经常(但不总是)重叠. 枚举 ...

  5. AI-web-1靶机过关记录

    靶机地址:172.16.1.195 Kali地址:172.16.1.107 1.信息收集 端口扫描: 目录扫描: 发现robots.txt敏感文件,查看 存在/m3diNf0/,/se3reTdir7 ...

  6. github使用--配置sshkey

    配置sshkey 好处:每次提代码都不要输入用户名和密码. 1.生成key: 输入命令ssh-keygen -t rsa -C "邮箱地址" [邮箱地址:注册github时填写的邮 ...

  7. SSH proxycommand 不在同一局域网的机器ssh直连

    本地和192.168.1.10不在同一个网络,可以通过jumpserver跳转过去,操作如下 选项 -L 本机端口 -f 后台启用,可以在本机直接执行命令,无需另开新终端 -N 不打开远程shell, ...

  8. python-Django与Apache整合wsgi模块

    1.安装wsgi模块 yum search mod_wsgi yum install -y mod_wsgi 2.会在httpd下有配置文件 cd /etc/httpd/conf.d/wsgi.con ...

  9. Android App安全渗透测试(一)

    一.            实验环境搭建 1.      安装JDK 2.      安装Android Studio 3.      模拟器或真机 我的是夜神模拟器和nexus 工具 Apktool ...

  10. 开发一款图片压缩工具(二):使用 pngquant 实现图片压缩

    上一篇我尝试使用了 pillow 库对 png 图片进行了压缩,效果不好.这次我换用 pngquant 来压缩.pngquant 是用于 PNG 图像有损压缩的命令行实用程序和库.压缩程序会显著减小文 ...