用PHP获取网页上的信息相对于xpath效率低点

用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 />";

}

基本原理就是先获取下载网页到本地,然后截取,最后用正则匹配。自己做得过程中没有对代码进行调优,导致代码太长,重复的地方太多,若截取的地方用正则还是无法判断,或者说区域有很多重复点,就需要再次截取接着排除干扰,比较繁琐,另外需要多写函数,把所有代码优化之后才能更深入提高自己水平。

时间: 2024-12-14 21:00:20

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

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

Demo地址:http://download.csdn.net/detail/u012881779/8831835 获取网页上所有图片.获取所有html.获取网页title.获取网页内容文字... .h 文件  代码: //网页   //NSString *strPath = [NSString stringWithFormat:@"http://www.baidu.com/s?wd=%@&cl=3",theWord];   //视频   //NSString *strPath

如何直接获取网页上的数据到工作表

这个网页上的数据不能复制,如何获取网页中的数据到Excel工作表中呢?(常见问题)如何提取网页上的表格数据怎么利用excel获取网上数据如何实时获取网页上的数据信息[资料来源于网络搜索:王西猛讲师的网络课堂][解决方法,wangqiang博客推荐视频教程] wangqiang博客推荐视频教程 原文地址:http://blog.51cto.com/13172026/2289258

webview 获取网页上的数据

最近做webview,遇到2种需求,一种是在自己服务器上的HTML中获取数据,另一种是通过自己服务器上的HTML中的超链接跳到另一个站点的HTML中,并获取数据. 于是,总结了2种通过webview获取网页上的数据的方式: 第一种:简单点的,直接通过js调java,在调用方法的过程中将数据通过方法的参数传递给Android端,(前提:服务端有对应的faxun对象,而且调用的方法是showImages(String[] imgUrls)). <span style="font-size:18

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

之前没发现php还有这个函数,get_meta_tags()直接就可以获取文件中meta标签的属性值,返回数组: <?php $metas = get_meta_tags('http://www.jd.com'); $kws_arr = array_filter(array_map('trim', explode(',',$metas['keywords']))); print_r($kws_arr); ?> php用get_meta_tags轻松获取网页的meta信息

如何获取网页上的LOGO

一般公司网页上的图片都会禁止右键另存为,用截图工具接下来的图会带背景色,PS成背景透明有点费时间. 用Google Chrome 或Firefox 打开目标网页,右键点击审查元素,将鼠标放在图片上,一般图片都被放在css里,找见图片网址,在浏览器里打开该网址,右键图片,选图片另存为,存下来的LOGO图片无背景色,可直接用.大小不合适可用office picture manager 打开图片,点击Edit picture,点crop切割图片.

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

public Bitmap getWebBitmap(String imgUrl) { Bitmap bitmap =null; try { InputStream inputStream = null; URL url; url = new URL(imgUrl); if (url != null) { // 打开连接 HttpURLConnection httpURLConnection = (HttpURLConnection) url .openConnection(); httpURL

iOS 获取UIWebView上面的按钮点击事件

UIWebView的一些用法总结的网址 http://blog.csdn.net/zhaoweixing1989/article/details/13021513 在网上看到很多文章都说iOS的UIWebView比较耗内存,在我的项目中,最开始我也是用UIWebView来加载网页的.刚开始加载的是自己拼接成的Html,后来在Html中加入一个按钮,点击之后用当前的UIWebView去加载网络上的网页.程序跑起来发现非常耗内存,加载几个网上的网页之后就爆内存警告了,不处理的话很容易被评估拒掉app

C# 获取网页数据、获取本机IP

说明: (1) http://www.3322.org/dyndns/getip 这个网址可以获取本机IP,读取的内容就是本机IP (2)方法经测试,可以实现. (3)参考:http://www.cnblogs.com/ceachy/articles/CSharp_Retrive_Page_Document.html 两种方法: (1)使用WebClient private static string GetIP(String url) { WebClient MyWebClient = new

python3爬虫-通过requests获取安居客房屋信息

import requests from fake_useragent import UserAgent from lxml import etree from http import cookiejar import re, time import pymysql import random from requests.exceptions import Timeout ua = UserAgent() session = requests.Session() class MyExceptio