文档章节

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

章郎虫
 章郎虫
发布于 2013/12/27 10:06
字数 572
阅读 110
收藏 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
宁波
系统管理员
scrapy学习实例(四)采集淘宝数据并展示

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

崔斯特
2017/12/19
0
0
《CURL技术知识教程》系列技术教程整理

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

开元中国2015
2015/05/07
470
0
Scrapy学习实例(二)采集无限滚动页面

上一篇写的是采集虎嗅网首页的新闻数据,有朋友对我说,采集多页试试看。后来研究下,虎嗅网首页是POST加载,中携带参数,所以只需要带上一个循环就好了。这是我最初的想法,先让我们看看Scr...

崔斯特
2017/12/03
0
0
福布斯系列之数据采集 | Python数据分析项目实战

1 数据采集概述 开始一个数据分析项目,首先需要做的就是get到原始数据,获得原始数据的方法有多种途径。比如: 获取数据集(dataset)文件 使用爬虫采集数据 直接获得excel、csv及其他数据文...

lemon
2017/09/04
0
0
为采集动态网页安装和测试Python Selenium库

引言 上一篇《为编写网络爬虫程序安装Python3.5》中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经不能满足采集的需求...

fullerhua
2016/10/25
13
0

没有更多内容

加载失败,请刷新页面

加载更多

一个可能的NEO链上安全随机数解决方案

0x00 困境 链上安全随机数生成应该算是一个比较蛋疼的问题,哪怕你的系统再牛逼,合约程序困在小小的虚拟机里,哪怕天大的本事也施展不开。 更悲催的是,交易执行的时候,是在每一个节点都执...

暖冰
今天
1
0
【大福利】极客时间专栏返现二维码大汇总

我已经购买了如下专栏,大家通过我的二维码你可以获得一定额度的返现! 然后,再给大家来个福利,只要你通过我的二维码购买,并且关注了【飞鱼说编程】公众号,可以加我微信或者私聊我,我再...

飞鱼说编程
今天
5
0
Spring5对比Spring3.2源码之容器的基本实现

最近看了《Spring源码深度解析》,该书是基于Spring3.2版本的,其中关于第二章容器的基本实现部分,目前spring5的实现方式已有较大改变。 Spring3.2的实现: public void testSimpleLoad(){...

Ilike_Java
今天
1
0
【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
今天
2
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
今天
24
4

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部