- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php实现简单爬虫的开发由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
有时候因为工作、自身的需求,我们都会去浏览不同网站去获取我们需要的数据,于是爬虫应运而生,下面是我在开发一个简单爬虫的经过与遇到的问题.
开发一个爬虫,首先你要知道你的这个爬虫是要用来做什么的。我是要用来去不同网站找特定关键字的文章,并获取它的链接,以便我快速阅读.
按照个人习惯,我首先要写一个界面,理清下思路.
1、去不同网站。那么我们需要一个url输入框。 2、找特定关键字的文章。那么我们需要一个文章标题输入框。 3、获取文章链接。那么我们需要一个搜索结果的显示容器.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<div
class
=
"jumbotron"
id=
"mainjumbotron"
>
<div
class
=
"panel panel-default"
>
<div
class
=
"panel-heading"
>文章url抓取</div>
<div
class
=
"panel-body"
>
<div
class
=
"form-group"
>
<label
for
=
"article_title"
>文章标题</label>
<input type=
"text"
class
=
"form-control"
id=
"article_title"
placeholder=
"文章标题"
>
</div>
<div
class
=
"form-group"
>
<label
for
=
"website_url"
>网站url</label>
<input type=
"text"
class
=
"form-control"
id=
"website_url"
placeholder=
"网站url"
>
</div>
<button type=
"submit"
class
=
"btn btn-default"
>抓取</button>
</div>
</div>
<div
class
=
"panel panel-default"
>
<div
class
=
"panel-heading"
>文章url</div>
<div
class
=
"panel-body"
>
<h3></h3>
</div>
</div>
</div>
|
直接上代码,然后加上自己的一些样式调整,界面就完成啦:
那么接下来就是功能的实现了,我用php来写,首先第一步就是获取网站的html代码,获取html代码的方式也有很多,我就不一一介绍了,这里用了curl来获取,传入网站url就能得到html代码啦:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
private
function
get_html(
$url
){
$ch
= curl_init();
$timeout
= 10;
curl_setopt(
$ch
, curlopt_url,
$url
);
curl_setopt(
$ch
, curlopt_returntransfer, 1);
curl_setopt(
$ch
, curlopt_encoding,
'gzip'
);
curl_setopt(
$ch
, curlopt_useragent,
'mozilla/5.0 (windows nt 6.1; wow64) applewebkit/537.36 (khtml, like gecko) chrome/34.0.1847.131 safari/537.36'
);
curl_setopt(
$ch
, curlopt_connecttimeout,
$timeout
);
$html
= curl_exec(
$ch
);
return
$html
;
}
|
虽然得到了html代码,但是很快你会遇到一个问题,那就是编码问题,这可能让你下一步的匹配无功而返,我们这里统一把得到的html内容转为utf8编码:
1
2
3
|
$coding
= mb_detect_encoding(
$html
);
if
(
$coding
!=
"utf-8"
|| !mb_check_encoding(
$html
,
"utf-8"
))
$html
= mb_convert_encoding(
$html
,
'utf-8'
,
'gbk,utf-8,ascii'
);
|
得到网站的html,要获取文章的url,那么下一步就是要匹配该网页下的所有a标签,需要用到正则表达式,经过多次测试,最终得到一个比较靠谱的正则表达式,不管a标签下结构多复杂,只要是a标签的都不放过:(最关键的一步) 。
1
2
|
$pattern
=
'|<a[^>]*>(.*)</a>|isu'
;
preg_match_all(
$pattern
,
$html
,
$matches
);
|
匹配的结果在$matches中,它大概是这样的一个多维素组:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
array
(2) {
[0]=>
array
(*) {
[0]=>
string(*)
"完整的a标签"
.
.
.
}
[1]=>
array
(*) {
[0]=>
string(*)
"与上面下标相对应的a标签中的内容"
}
}
|
只要能得到这个数据,其他就完全可以操作啦,你可以遍历这个素组,找到你想要a标签,然后获取a标签相应的属性,想怎么操作就怎么操作啦,下面推荐一个类,让你更方便操作a标签:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$dom
=
new
domdocument();
@
$dom
->loadhtml(
$a
);
//$a是上面得到的一些a标签
$url
=
new
domxpath(
$dom
);
$hrefs
=
$url
->evaluate(
'//a'
);
for
(
$i
= 0;
$i
<
$hrefs
->length;
$i
++) {
$href
=
$hrefs
->item(
$i
);
$url
=
$href
->getattribute(
'href'
);
//这里获取a标签的href属性
}
|
当然,这只是一种方式,你也可以通过正则表达式匹配你想要的信息,把数据玩出新花样.
得到并匹配得出你想要的结果,下一步当然就是传回前端将他们显示出来啦,把接口写好,然后前端用js获取数据,用jquery动态添加内容显示出来:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
var
website_url =
'你的接口地址'
;
$.getjson(website_url,
function
(data){
if
(data){
if
(data.text ==
''
){
$(
'#article_url'
).html(
'<div><p>暂无该文章链接</p></div>'
);
return
;
}
var
string =
''
;
var
list = data.text;
for
(
var
j in list) {
var
content = list[j].url_content;
for
(
var
i in content) {
if
(content[i].title !=
''
) {
string +=
'<div class="item">'
+
'<em>[<a href="http://'
+ list[j].website.web_url +
'" target="_blank">'
+ list[j].website.web_name +
'</a>]</em>'
+
'<a href=" '
+ content[i].url +
'" target="_blank" class="web_url">'
+ content[i].title +
'</a>'
+
'</div>'
;
}
}
}
$(
'#article_url'
).html(string);
});
|
上最终效果图:
最后此篇关于php实现简单爬虫的开发的文章就讲到这里了,如果你想了解更多关于php实现简单爬虫的开发的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我在一个网站上工作。 我需要了解我的网站是否获得了来自 Google 或任何其他搜索引擎的抓取工具/机器人的访问 在我的应用程序中,我正在拦截 http 请求。并且需要查明爬虫/机器人是否正在发出 h
我与北京理工大学python爬虫的邂逅 在人生的旅途中,我们时常有机会邂逅一些惊艳的事物,它们仿佛一束亮光照亮了前行的道路。而我,一个平凡的人类,也不例外。回想起那个让我心动的时刻,我想起了与北京理工
从“爬虫”谈起 在这个信息爆炸的时代,互联网上的数据宛如茫茫星海,琳琅满目。但是,我们能否想象到这些数据背后隐藏着多少珍贵的信息呢?有人说,要想获得这些数据,我们需要借助一种神奇的力量——爬虫。 什么
探索未知的领域 曾几何时,我陷入了对互联网世界的好奇之中。作为一个普通的人类,我对于计算机技术的了解可谓是一窍不通。然而,好奇心驱使着我踏上了学习的征途。 奇妙的爬虫 在探索计算机领域的过程中,我翻阅
教室的奇妙之旅 在一个晴朗的早晨,我来到了一所神奇且富有魅力的教室。这里充满了未知的冒险和无限的学习可能。嘿,你没听错,就是那个零基础Python视频教程课程的教室!让我带你一起踏上这趟令人期待的爬虫
零基础学python3 爬虫 嗨,各位小伙伴们!今天要和大家分享一段有关学习Python3爬虫的故事。无论是技术小白还是编程高手,都可以从中获益良多。 1. 邂逅神奇的爬虫世界 就像是迷失在未知之地的
我正在开发一个 Python(3) 程序,在该程序中,我必须使用输入作为表示各种操作的多次迭代列表来返回目录迭代的移动次数,例如: ../ 表示移动到当前文件夹的父文件夹。 ./ 保留在同一文件夹中
我和Python:一段关于爬虫和第三方库的故事 曾经有一个人,他和一门编程语言结下了不解之缘。这门语言就是Python,一个灵活而强大的工具,让他的世界变得多姿多彩。 遇见爬虫:探索未知的世界 某天,
偷心技艺:大众点评TOP10 爬虫 Python 故事发生在一个被互联网包围的城市,充满了各种各样的餐馆、咖啡厅和美食街巷。每天都有无数的食客们纠结于选择哪家餐厅才能获得满足和享受。就在这个时候,我偶
登山寻宝:为什么Python爬虫部分网页源码 人生就像登山寻宝的旅程,充满了未知和挑战。而对于爱好编程的我来说,写一个Python爬虫,探索网络世界也是一种刺激的冒险。今天,我想和大家分享一下为什么要
插班生的悲喜交加 记得那个夏天,我踏入了编程的殿堂,成为了一名程序员。对于一个毫无基础的人来说,这是一次勇敢而激动的尝试。然而,更令我兴奋的是,在我的码农之旅中,我发现了一种神奇的力量——Python
一、 意外的宝藏 当我踏进了编程的大门,发现了那个绚丽多彩的世界时,我仿佛捡到了一个意外的宝藏。在编码的世界里,我像是一个魔术师,用着神奇的符号与逻辑来创造奇迹。然而,随着时间的推移,我渐渐找到了一种
“呜呜呜~” 夏日的阳光穿过微风,洒在我身上,仿佛一片温暖而宁静的海洋。我望着眼前充满希望与挑战的屏幕,满脸的期待和困惑。作为一个刚刚入门的编程初学者,我竭尽全力探索着那座神秘的编程世界,好像是航行在
我的编程之旅 嗨,大家好!我是一个普通的人类,对于编程世界充满着无限的好奇和热情。今天,我想向大家讲述一段关于我的编程经历,特别是在爬虫领域的探索之旅。 1. 踏上未知的征途 就像一只踏上大海的小船,
揭秘神奇的爬虫世界:探寻京东销量数据库 从古至今,人类一直渴望了解世界的各个角落。而对于互联网这个充满未知和神秘的领域来说,我们更是怀着好奇和充满冒险精神的心态去探索。今天,我将带领大家踏上一段激动人
啊!你好呀!很高兴能遇到你,让我向你讲一个关于python爬虫爬取关键词排名的故事。 章节一:奇妙的网络世界 网络就像一片浩瀚的海洋,里面有无数宝藏等待着我们发掘。而当我们学会了使用python这把钥
一次意外的奇遇 在我们生活的世界中,技术如今已经无处不在,无论是大型软件开发还是个人应用,都离不开它的支持。而其中最为神奇的领域之一,就是爬虫技术。想象一下,你有可能仅凭几行代码,就能够在电脑屏幕上将
奇遇之旅 在这个大千世界中,我有幸踏上了一次令人兴奋的冒险之旅。故事的开始,是一个寂静而神秘的夜晚。 迷宫的入口 深夜的城市,街道上弥漫着微弱的灯光,仿佛点缀着无数的星星。我沿着曲径通幽的小巷走着,脚
python 爬虫 自动上传下载 从前有一个热爱编程的小伙子,他喜欢利用自己的技术解决各种实际问题。有一天,他面对一个任务:需要在网络上批量上传和下载文件。这可不是一件轻松的工作,但对于这位小伙子来说
一场奇妙的探险之旅:Python编程语言中的爬虫第三方库 故事从一个寻宝者开始。他身穿一件斑驳的皮衣,手持一柄锈迹斑斑的剑,如同一个当代版的荒野游侠。这位勇士的目标是探索Python编程语言中的神秘领
我是一名优秀的程序员,十分优秀!