手机版

php实现了简单爬虫的开发

时间:2021-11-06 来源:互联网 编辑:宝哥软件园 浏览:

有时候因为我们的工作和自己的需要,我们会浏览不同的网站来获取我们需要的数据,于是爬虫就应运而生了。以下是我在开发一个简单爬虫的经验和问题。

要开发一个爬虫,你必须首先知道你的爬虫是为了什么。我想去不同的网站找有特定关键词的文章,获取它的链接,这样我就可以快速阅读。

根据我个人的习惯,我应该先写一个界面,整理一下思路。

1.去不同的网站。然后我们需要一个网址输入框。2.查找带有特定关键词的文章。然后我们需要一个文章标题输入框。3.获取文章链接。然后我们需要一个显示搜索结果的容器。

Div class=' jumbo tron ' id=' main jumbo tron ' Div class=' panel panel-default ' Div class=' panel-heading '文章URL爬网/Div class=' panel-body ' Div class=' form-group '标签为=' article _ title '文章标题/标签类型=' text ' class=' form-control ' id=' article _ title '占位符=' article title '/Div class=' form-group '标签为=' web _ URL '网站URL/标签类型=' text' class=' form-control' id='网站_ URL '占位符='网站URL'/div按钮类型=' submit ' class=' btnbtn-default ' grab/button/Div/Div class=' panel-panel-heading '文章URL/Div class=' panel-body ' H3/H3/Div/Div/Div直接加载代码,然后添加一些自己的样式调整,界面就完成了:

然后下一步是功能的实现。我用PHP写的。第一步是获取网站的html代码。获取html代码的方法有很多,我就不一一介绍了。在这里,curl是用来得到它的。您可以通过传入网站的url来获取html代码。

私有函数get _ html($ URL){ $ ch=curl _ init();$ timeout=10curl_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)applebwebkit/537.36(KHTML,像Gecko)Chrome/34 . 0 . 1847 . 131 Safari/537.36’;curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$ time out);$ html=curl _ exec($ ch);返回$ html}虽然得到了html代码,但是很快就会遇到一个问题,那就是编码问题,可能会让你下一次匹配失败。在这里,我们将获得的html内容统一转换为utf8编码:

$ 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标签:(最关键的一步)。

$pattern='|a[^]*(.*)/a | ISu ';preg_match_all($pattern,$html,$ matches);匹配的结果是$matches,这可能是这样一个多维元素组:

数组(2) {[0]=数组(*) {[0]=字符串(*)“完成一个标记”.} [1]=数组(*) {[0]=字符串(*)'上面下标' }对应的A标签中的内容}只要能得到这个数据,其他的都是完整的。

$ DOM=new DOM document();@ $ DOM-LoadHTML($ a);//$a是上面获得的一些a tags $ URL=new DOM XPath($ DOM);$ hrefs=$ URL-evaluate('//a ');for($ I=0;$ I $ hrefs-长度;$ I){ $ href=$ href-item($ I);$ URL=$ href-GetAttribute(' href ');//在这里获取一个标签的href属性}当然,这只是一种方式,你也可以通过正则表达式匹配你想要的信息,对数据玩新花样。

得到并匹配得出你想要的结果,下一步当然就是传回前端将他们显示出来啦,把接口写好,然后前端用射流研究…获取数据,用框架动态添加内容显示出来:

定义变量网站_url='你的接口地址;$.getJSON(网站_url,函数(数据){ if(数据){ if(数据。text==' '){ $(' # article _ URL ').html('divp暂无该文章链接/p/div ');返回;} var string=var list=data . text for(列表中的var j){ var内容=列表[j].url _ contentfor(内容中的var I){ if(内容[I]).标题!=' '){ string=' div class=' item ' ' ' em[a href=' http://' list[j]。网站。web _ URL ' ' target=' _ blank ' '列表[j]。网站。web _ name '/a/em ' a href='内容[I].URL ' '目标=' _ blank '类=' web _ URL ' '内容[i].title '/a ' '/div ';} } } $('#article_url ').html(字符串);});上最终效果图:

版权声明:php实现了简单爬虫的开发是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。