文档章节

使用PHP做网页采集实例过程总结

章郎虫
 章郎虫
发布于 2013/12/27 10:06
字数 572
阅读 108
收藏 0
点赞 0
评论 0

最近有个任务是需要我检查一些网站,如果纯手工检查的话,感觉既费时又无聊。所以我就想用采集。思路其实很简单,先把网站的源码采集下来,然后用正则表达式去匹配符合的链接,最后把标题和网址入库、分析。因为我使用最多的是php,所以打算用php做网页采集。

第一步,链接数据库,取出需要检查的网站和正则。

数据库这里我用了postgresql,数据库和表已经按要求建好。因为默认配置的环境是centos系统加nginx、mysql和php,所以首先是配置环境。配置具体不在这里多说,下次总结。环境配置好后在php中用pg_connect连接数据库,这里我连接了两个不同的数据库。

$conn_1=pg_connect("host=xxx.xxx.xxx.xxx port=5432 dbname=mydb1 user=postgres password=xxxxxx") ;

$conn_2=pg_connect("host=xxx.xxx.xxx.xxx port=5432?dbname=mydb2?user=postgres password=xxxxxx") ;

第二步,取出网页源码,对源码进行初步处理。

不同网站编码格式不一样,需要先把编码统一转换成utf-8,不然之后入库会出现乱码。

//获取网页源码

//$url='http://www.sijitao.net/' ;

$str = file_get_contents($url);

//使用preg_match和正则表达式取出编码

$wcharset = preg_match("/<meta.+?charset=[^\w]?([-\w]+)/i",$str,$temp) ? strtolower($temp[1]):"" ;

//编码转换

if($wcharset){

$str=iconv("$wcharset", "UTF-8", $str) ;

}

这里我还使用str_ireplace()函数对取到的源码做了些字符替换,不然最后用正则匹配网址的时候会出现问题。

第三步,匹配处理后的源码字符串,对匹配的数据入库。

从数据库中取出对应的正则,保存在$preg变量,符合正则的数据已数组形式保存在$m。

$pat = "/<a(.*?)href=\"($preg)\"(.*?)>(.*?)<\/a>/is";

preg_match_all($pat, $str, $m);

$cnt=count($m[2]) ;

for($i=0;$i<$cnt;$i++){

if(strip_tags($m[2][$i])){

$url=strip_tags($m[2][$i]) ;

$url=$m[2][$i] ;

}

if(strip_tags($m[4][$i])){

$title=strip_tags($m[4][$i]) ;

}

else{

$title="There's Something Errors!" ;

}

//编写代码,对title和url进行入库操作。

}

}

采集单个网页这样基本上就算完成了。总结,这里其实就用了preg_match(),preg_match_all()和str_ireplace()函数。程序菜鸟,写的不好请见谅。

原文地址:http://www.sijitao.net/1511.html

© 著作权归作者所有

共有 人打赏支持
章郎虫
粉丝 1
博文 15
码字总数 12766
作品 0
宁波
系统管理员
PHP cURL 应用

本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 。 对于做过数据采集的人来说,cURL一定不会陌生。虽然在PHP中有filegetcontents函数可以获取远程链接的数据,但是它的可...

BearCatYN ⋅ 2015/06/03 ⋅ 0

《CURL技术知识教程》系列技术教程整理

《CURL技术知识教程》系列技术教程整理 有时间会不断更新,大家有什么好的推荐的可以在下面回复,我会酌情收录 1PHP采集相关教程之一 CURL函数库 2php中通过curl模拟登陆discuz论坛的实现代码...

开元中国2015 ⋅ 2015/05/07 ⋅ 0

PHP采集 抓取

今天被安排做一下搜狐首页新闻部分抓取。本来很简单的事情,谁知到了搜狐页面抓过来的一直是乱码,怎么转都不行。只好深入研究了一下,也学到不少东西,写下来分享一下。 一、 什么是php采集...

idea_biu ⋅ 2012/08/22 ⋅ 1

使用phpQuery轻松采集网页内容

phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容,比如获取某新闻网站的头条信息。更有意思的是,它采用了jQuery的思想,你可以像使用jQuery一样处理页面内...

Minho ⋅ 2012/02/08 ⋅ 0

PHP模拟登录并获取数据

cURL 是一个功能强大的PHP库,使用PHP的cURL库可以简单和有效地抓取网页并采集内容,设置cookie完成模拟登录网页,curl提供了丰富的函数, 开发者可以从PHP手册中获取更多关于cURL信息。本文...

Louis_88 ⋅ 2015/09/19 ⋅ 0

php操作大缓存的存储与读取

什么是大缓存,按照我的理解,就是超过1MB的缓存都可以称之为大缓存了,频繁的读取超过此大小的文件去进行处理,不管从做项目还是做产品的角度,似乎都是不可理解的。 从数据缓存的角度来说,...

小小程序员 ⋅ 2013/07/03 ⋅ 3

php中curl的多线程

我刚刚才知道php的curl居然有多线程版,以后的采集过程就不需要再使用Python的多线程咯。 许多人对php手册中语焉不详的curlmulti一族的函数头疼不已,它们文档少,给的例子 更是简单的让你无...

杨太化 ⋅ 2015/10/13 ⋅ 0

防止网页被搜索引擎爬虫和网页采集器收录的方法汇总

最常规的防止网页被搜索引擎收录的方法是使用robots.txt,但是这样做的弊端是要将所有已知的搜索引的爬虫信息都罗列进去,难免有疏漏。下面的这些方法是可以标本兼治的:(摘编自http://www....

晨曦之光 ⋅ 2012/02/24 ⋅ 0

关于PHP批量采集----采集小说站有感

概况:帮周同学做小说采集做了有一段时间了。一开始是从其它网站的页面上直接写正则去采集,然后慢慢的转为采集别人提供的API。 环境:CENTOS+NGINX+PHP5.2.17。基于JIEQI小说管理系统。 直接...

jacky_chen ⋅ 2013/06/24 ⋅ 4

scrapy学习实例(四)采集淘宝数据并展示

本节代码 : zhangslob/Taobao_duoshou 万水千山总是情,给个star行不行 铛铛铛,懒惰了一段时间,咱接着学Scrapy。这一期玩点新花样,使用Flask展示我们的数据。效果如下图: 有些重复的 ╮...

崔斯特 ⋅ 2017/12/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

思路分析 如何通过反射 给 bean entity 对象 的List 集合属性赋值?

其实 这块 大家 去 看 springmvc 源码 肯定可以找到实现办法。 因为 spirngmvc 的方法 是可以 为 对象 参数里面的 list 属性赋值的。 我也没有看 具体的 mvc 源码实现,我这里只是 写一个 简...

之渊 ⋅ 44分钟前 ⋅ 0

vim使用手册--配对括号的查找

1、把光标放在标记有(、[或{处。 2、按%字符 3、此时光标的位置应当在配对的括号处 4、再次按%就可以跳回配对的第一个括号处。

dragon_tech ⋅ 48分钟前 ⋅ 0

c++ 、object-c printf,%02X和%x有什么区别 ?

%x即按十六进制输出,英文字母小写,右对齐。 %02X有以下变化:英文字母变大写,如果输出字符不足两位的,输出两位宽度,右对齐,空的一位补0。超过两位的,全部输出。 如果不用 %02x 会出现...

yizhichao ⋅ 53分钟前 ⋅ 0

Spring源码解析(七)——实例创建(中)

前言 上一节讲到了,Spring 会根据实例的作用域执行不同的创建逻辑,分别是 Singleton、Prototype、其他 Scope,其中 Singleton 会调用 getSingleton 从缓存中获取,缓存中没有才会创建实例;...

MarvelCode ⋅ 54分钟前 ⋅ 0

Thrift RPC实战(六) spring集成thrift

1.服务端设置 对泛型Thrift Service的支持, 通过采用spring配置以及反射的方式来实现.对于一个服务提供者来说,需要提供端口,接口以及接口实现类,因此在接口中spring配置文件中配置如下 <!...

lemonLove ⋅ 56分钟前 ⋅ 0

oracle11g自动分区使用

为什么使用自动分区? 在oracle11g之前,oracle是不支持自动分区功能的,这就可能导致我们系统在运行一段时间之后,就需要看看分区是否创建或者写触发器进行创建分区,否则就会导致数据无法入...

strict_nerd ⋅ 今天 ⋅ 0

Spring mvc ViewResolver视图解析器实现机制

概要 我们在controller里面经常这样return一个ModelAndView。 return new ModelAndView("userList", "users", userList); DispatcherServlet 靠 ViewResolver 把 userList 解析为 /WEB-INF......

轨迹_ ⋅ 今天 ⋅ 0

策略模式

1.策略模式 策略模式是同一个行为的不同处理办法。策略模式和简单工厂模式的区别:1.策略模式主要是方法的执行方式,工厂模式要获取的对象。两者的侧重点不同。 ...

Cobbage ⋅ 今天 ⋅ 0

行政区划代码转为字典形式

原数据为: http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/201804-06041553.html 手动替换了一下格式,并使用下面的代码处理. # 输入格式s = """110000:北京市110101:东城区1101...

漫步海边小路 ⋅ 今天 ⋅ 0

android apk 签名

创建key,需要用到keytool.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),使用产生的key对apk签名用到的是jarsigner.exe (位于C:\Program Files\Java\jdk1.6.0_10\bin目录下),把...

国仔饼 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部