php 爬虫采集
概述
现在爬虫技术算是一个普遍的技术了,各个语言的爬虫百家争鸣,但是根据笔者自己的感觉还是python是主流。爬虫涉及到太多的东西,笔者并不是专业的爬虫工程师,只不过个人兴趣分享一下。由于笔者是php工作,所以就使用php来进行简单爬虫。不过我的方法应该是很通用的,我相信java,C#等肯定有类似的函数,然后做法其实都一样了。
技术准备
看懂这段代码你需要对php的正则表达式函数以及正则表达式有一定的理解。
代码 注意实际代码就这么多
<?php
//这个是你网页正则匹配出来的字符串
$str = '<div class="title">
<h3><span>[小组] </span> <a href="链接内容1" target="_blank">标签内容1</a></h3>
<div class="info">
237059 成员
</div>
</div>
<div class="title">
<h3><span>[小组] </span> <a href="链接内容2" target="_blank">标签内容2</a></h3>
<div class="info">
237059 成员
</div>
</div>';
//这个是正则的输出结果
preg_match_all('/<div class="title">[\s\S]*?<h3>[\s\S]*?<a href="(.*?)"[\s\S]*?>(.*?)<\/a>/',$str,$match);
print_r($match);//根据打印的结果很明白了吧
//这个方法就是抓取网页内容的方法了可以吧需要抓取的页面传进去,然后正则匹配内容哦
function getUrlContent($url){//通过url获取html内容
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1 )");
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
?>
到这里就可以匹配你想要的数据了,如果还是不懂,就继续往下瞅瞅
流程图

简单的爬虫,特殊字符处理就不进行了,保证插入数据库不出错就行了
思路
首先getUrlContent($url)函数,只需要穿一个url地址就行了,当然了因为各个网站都有反扒机制,不过笔者的这个函数并不是万能的,但是在豆瓣测试过,其他网站大家自行测试了。
任何网站都可以理解为一个很长的字符串,如果对html有研究无非就是:
<html>
<head>XXX</head>
<body>XXX</body>
</html>
我们需要的只是将body标签里的东西拿出来,笔者模拟了一段body里的代码
<html>
<head>XXX</head>
<body>
<div class="title">
<h3><span>[小组] </span> <a href="链接内容1" target="_blank">标签内容1</a></h3>
<div class="info">
237059 成员
</div>
</div>
<div class="title">
<h3><span>[小组] </span> <a href="链接内容2" target="_blank">标签内容2</a></h3>
<div class="info">
237059 成员
</div>
</div>
</body>
</html>
对于这段代码,可以理解为一个很长的字符串
$str = '<html>
<head>XXX</head>
<body>
<div class="title">
<h3><span>[小组] </span> <a href="链接内容1" target="_blank">标签内容1</a></h3>
<div class="info">
237059 成员
</div>
</div>
<div class="title">
<h3><span>[小组] </span> <a href="链接内容2" target="_blank">标签内容2</a></h3>
<div class="info">
237059 成员
</div>
</div>
</body>
</html>';
对这段字符串,只需要进行正则匹配拿出你想要的,假如需要a标签里的href与内容
preg_match_all('/<div class="title">[\s\S]*?<h3>[\s\S]*?<a href="(.*?)"[\s\S]*?>(.*?)<\/a>/',
$str,$match);
然后如果你不认识这段正则表达式还有preg_match_all函数,这里笔者就简单说下了,[\s\S]*?代表懒惰匹配任意字符,因为标签之间会用空格符换行符,这里又出现新问题什么叫懒惰匹配,简单来说就是匹配最少的内容。(.*?)代表非空字符,加括号的原因简单来说就是括号里的内容是你想要的,前面的[\s\S]*?匹配到的是一堆特殊符号,并没有什么作用,你不用把特殊符号记录下来,所以不加括号。
最后打印结果,也就是$match数组。
Array
(
[0] => Array
(
[0] => <div class="title">
<h3><span>[小组] </span> <a href="链接内容1" target="_blank">标签内容1</a>
[1] => <div class="title">
<h3><span>[小组] </span> <a href="链接内容2" target="_blank">标签内容2</a>
)
[1] => Array
(
[0] => 链接内容1
[1] => 链接内容2
)
[2] => Array
(
[0] => 标签内容1
[1] => 标签内容2
)
)
根据这个数组,需要什么自己遍历数组,然后拼装sql语句,插入到自己的数据库中即可。但是插入过程中可能会有一些单引号双引号捣乱,所以你用str_replace()把他们替换掉,或者加转义符号。
总结
只是针对php进行的简单爬虫,不过爬虫的思路我相信很多种语言都用得到。不过很多网站的内容是通过js返回的,或者需要登陆才能获取到数据,这些比较高级的部分,有兴趣的推荐自学python爬虫。
本文转载自https://blog.csdn.net/qq_35370923/article/details/82901220
php 爬虫采集的更多相关文章
- python爬虫采集
python爬虫采集 最近有个项目需要采集一些网站网页,以前都是用php来做,但现在十分流行用python做采集,研究了一些做一下记录. 采集数据的根本是要获取一个网页的内容,再根据内容筛选出需要的数 ...
- 利用Python网络爬虫采集天气网的实时信息—BeautifulSoup选择器
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10-20 ...
- 基于Python爬虫采集天气网实时信息
相信小伙伴们都知道今冬以来范围最广.持续时间最长.影响最重的一场低温雨雪冰冻天气过程正在进行中.预计,今天安徽.江苏.浙江.湖北.湖南等地有暴雪,局地大暴雪,新增积雪深度4-8厘米,局地可达10- ...
- 抖音爬虫教程,python爬虫采集反爬策略
一.爬虫与反爬简介 爬虫就是我们利用某种程序代替人工批量读取.获取网站上的资料信息.而反爬则是跟爬虫的对立面,是竭尽全力阻止非人为的采集网站信息,二者相生相克,水火不容,到目前为止大部分的网站都还是可 ...
- 去除爬虫采集到的\xa0、\u3000等字符
\xa0表示不间断空白符,爬虫中遇到它的概率不可谓不小,而经常和它一同出现的还有\u3000.\u2800.\t等Unicode字符串.单从对\xa0.\t.\u3000等含空白字符的处理来说,有以下 ...
- python爬虫采集网站数据
1.准备工作: 1.1安装requests: cmd >> pip install requests 1.2 安装lxml: cmd >> pip install lxml ...
- python爬虫-采集英语翻译
http://fanyi.baidu.com/?aldtype=85#en/zh/drughttp://fanyi.baidu.com/?aldtype=85#en/zh/cathttp://fa ...
- 编写python爬虫采集彩票网站数据,将数据写入mongodb数据库
1.准备工作: 1.1安装requests: cmd >> pip install requests 1.2 安装lxml: cmd >> pip install lxml ...
- Python爬虫——城市公交、地铁站点和线路数据采集
本篇博文为博主原创,转载请注明. 城市公交.地铁数据反映了城市的公共交通,研究该数据可以挖掘城市的交通结构.路网规划.公交选址等.但是,这类数据往往掌握在特定部门中,很难获取.互联网地图上有大量的信息 ...
随机推荐
- Keepalived 配置文件
keepalived的配置文件: keepalived只有一个配置文件keepalived.conf,里面主要包括以下几个配置区域,分别是global_defs. 全局定义及 ...
- Keepalived 介绍 原理
keepalived是什么: 这里先和前面的LVS 联系一下,我们平时使用一台机器运行 LVS 进行数据的转发,这里会有两个问题1.如果这台LVS 故障了怎么办?整个集群系统都会停止工作2.LVS后端 ...
- 安利自己写的easy-clipboard库
概述 clipboard.js 是一个非常好用的剪切板插件,但是随着前端框架的演变,用户与网页交互的方式越来越多,不仅限于点击事件了,并且在很多情况下,我们可能不需要它强制性自带的点击事件,所以我打算 ...
- 浮动和包含框的关系,伪元素after解决高度塌陷
浮动会使元素尽量向左或向右移动,直到碰到包含框或另外一个浮动元素的盒子模型的边缘 包含框并不会改变里面浮动元素的宽高,浮动元素宽高不会限制在包含块以内 <!DOCTYPE html> &l ...
- Android更改popupmenu背景并显示图标
似乎popupmenu是无法单独设置style的,好像是由context决定的,前几天需要设置style,找了很久才找一一个办法,似乎是通过 ContextThemeWrapper 包装一个 Cont ...
- 手动发布本地jar包到Nexus私服
1.Nexus配置 1. 在Nexus私服上建立仓库,用于盛放jar包,如名叫3rd_part. 2. 注册用户Nuxus用户,如名叫dev,密码dev_123. 3. 给dev用户分配能访问3rd_ ...
- Android 调试桥 (adb) 是 命令行命令--官方拷贝过来的,留作自己查看
Android 调试桥 (adb) 是一种功能多样的命令行工具,可让您与设备进行通信.adb 命令便于执行各种设备操作(例如安装和调试应用),并提供对 Unix shell(可用来在设备上运行各种命令 ...
- 解决BitLocker反复提示恢复密钥正确而无法进入系统的问题
前一阵电脑因为装了grub,引导策略被改了.开Windows要求输入恢复密钥以进行恢复.我登陆过Microsoft账户所以在官网上找到了密钥并恢复了驱动器.但是进去提示"恢复密钥正确&quo ...
- cf877D
题意简述:矩阵中有的点不能走,你每次可从四个方向走,至少走一步,最多走k步(不能横跨那些不能走的格子),问从(sx,sy)走到(tx,ty)的最短时间是多少? 题意:利用set来加速bfs的过程,原理 ...
- Excel开启宏以后保存是会提示安全警告,怎么取消
如果你用的(应该)是2007以上版本的话 请点左上角的EXCEL图标,EXCEL选项,信任中心,信任中心设置,个人信息选项,保存时从文件属性中删除个人信息前面的对号取消.确定就可以了. (补充:如果你 ...