PHP如何开发简单爬虫
有时候因为工作、自身的需求,我们都会去浏览不同网站去获取我们需要的数据,于是爬虫应运而生,下面是开发一个简单爬虫的经过与遇到的问题。开发一个爬虫,首先你要知道你的这个爬虫是要用来做什么的。我是要用来去不同网站找特定关键字的文章,并获取它的链接,以便我快速阅读。
按照个人习惯,我首先要写一个界面,理清下思路。
1、去不同网站。那么我们需要一个url输入框。
2、找特定关键字的文章。那么我们需要一个文章标题输入框。
3、获取文章链接。那么我们需要一个搜索结果的显示容器。
[xhtml] view plain copy <p class="jumbotron" id="mainJumbotron"> <p class="panel panel-default"> <p class="panel-heading">文章URL抓取</p> <p class="panel-body"> <p class="form-group"> <label for="article_title">文章标题</label> <input type="text" class="form-control" id="article_title" placeholder="文章标题"> </p> <p class="form-group"> <label for="website_url">网站URL</label> <input type="text" class="form-control" id="website_url" placeholder="网站URL"> </p> <button type="submit" class="btn btn-default">抓取</button> </p> </p> <p class="panel panel-default"> <p class="panel-heading">文章URL</p> <p class="panel-body"> <h3></h3> </p> </p> </p>
直接上代码,然后加上自己的一些样式调整,界面就完成啦:
那么接下来就是功能的实现了,我用PHP来写,首先第一步就是获取网站的html代码,获取html代码的方式也有很多,我就不一一介绍了,这里用了curl来获取,传入网站url就能得到html代码啦:
[xhtml] view plain copy 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编码:
[php] view plain copy $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标签的都不放过:(最关键的一步)
[php] view plain copy $pattern = '|<a[^>]*>(.*)</a>|isU'; preg_match_all($pattern, $html, $matches);
匹配的结果在$matches中,它大概是这样的一个多维素组;
[js] view plain copy array(2) { [0]=> array(*) { [0]=> string(*) "完整的a标签" . . . } [1]=> array(*) { [0]=> string(*) "与上面下标相对应的a标签中的内容" } }
只要能得到这个数据,其他就完全可以操作啦,你可以遍历这个素组,找到你想要a标签,然后获取a标签相应的属性,想怎么操作就怎么操作啦,下面推荐一个类,让你更方便操作a标签:
[php] view plain copy $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动态添加内容显示出来:
[php] view plain copy var website_url = '你的接口地址'; $.getJSON(website_url,function(data){ if(data){ if(data.text == ''){ $('#article_url').html('<p><p>暂无该文章链接</p></p>'); 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 += '<p 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>' + '</p>'; } } } $('#article_url').html(string); });
上最终效果图:
以上是PHP如何开发简单爬虫的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undress AI Tool
免费脱衣服图片

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Stock Market GPT
人工智能驱动投资研究,做出更明智的决策

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

单例模式确保一个类只有一个实例,并提供全局访问点,适用于需要单一对象协调系统操作的场景,如数据库连接或配置管理。2.其基本结构包括:私有的静态属性存储实例、私有构造函数防止外部创建、私有克隆方法防止复制,以及公共静态方法(如getInstance())用于获取实例。3.在PHP中通过调用getInstance()方法获取唯一实例,无论调用多少次都返回同一对象引用。4.标准PHP请求模型下无需考虑线程安全,但在长运行或多线程环境中需注意同步问题,而PHP本身不支持原生锁机制。5.尽管单例有用,但会

答案:PHP的空合并操作符(??)用于检查变量或数组键是否存在且非null,若成立则返回其值,否则返回默认值。它可避免使用冗长的isset()检查,适用于处理未定义变量和数组键,如$username=$userInput??'guest',且支持链式调用,如$theme=$userTheme??$defaultTheme??'dark',特别适合表单、配置和用户输入处理,但仅排除null值,空字符串、0或false均被视为有效值返回。

使用$_GET获取URL参数,如?name=John&age=25;通过isset或空合并运算符检查存在性,并用filter_input过滤和验证数据以确保安全。

答案:使用file_get_contents和cURL可下载URL文件,前者简单但受限制,后者更灵活且支持流式处理。示例包括直接读取写入文件、cURL初始化设置选项并保存、添加错误处理及HTTP状态检查,大文件推荐分块流式下载以节省内存,确保目录可写并妥善处理异常。

TodisableaPHPfunction,usedisable_functionsinphp.iniforbuilt-infunctionslikeexecorsystem,whichblocksthemgloballyforsecurity;foruser-definedfunctions,preventexecutionbywrappingtheminconditions,renaming,commentingout,orcontrollingfileinclusionviaautoloa

使用implements关键字实现接口,类必须提供接口中所有方法的具体实现。2.定义接口用interface关键字声明方法。3.类实现接口并重写方法。4.创建对象调用方法输出结果。5.一个类可实现多个接口,确保代码规范和可维护性。

TopreventXSSinPHP,sanitizeuserinputandescapeoutputbasedoncontextusinghtmlspecialchars()forHTML,json_encode()forJavaScript,andvalidatestrictlywithfilter_var()forexpecteddatatypes,whileavoidingdeprecatedfunctionsandusingContent-Security-Policyheadersfo

GET方法将数据附加在URL中,适用于非敏感信息;POST方法通过请求体发送数据,更安全,适合敏感信息。
