从其他网站抓数据

news/2024/5/10 11:36:25/文章来源:https://blog.csdn.net/weixin_33882443/article/details/93217831

缘由

吃饭的时候和朋友聊天,谈到他上一个项目,他去抓其他网站的数据,然后用canvas画出走势图。吸引我的是前面的抓数据,以前从来没有尝试过,一定会很有意思了!

开始

听他讲大致就是用jsonp去请求,然后读取json吧。感觉这种方式不太好,因为只有目标网站提供了相应接口,才能去请求,然后解析收到的数据。 自己尝试用jsonp去请求一些数据,于是找数据接口,不过好少。目前找到的下面几个: (浏览器中打开的json格式不太好看,请读者朋友把下面的json拷到http://jsonformatter.curiousconcept.com/

朋友项目中用到的:

http://jry.baidao.com/api/hq/npdata.do

天气:

http://www.weather.com.cn/data/sk/101281601.html

http://www.weather.com.cn/data/cityinfo/101281601.html

http://m.weather.com.cn/data/101281601.html //东莞天气

….

新浪:

https://api.weibo.com/2/statuses/public_timeline.json?source=1105337522//获取公共微博注意.最后为你的appkey。

https://api.weibo.com/2/account/get_uid.json?source=1105337522//获取授权用户UID.

https://api.weibo.com/2/statuses/friends_timeline.json?source=1105337522 获取当前登录用户及其所关注用户的最新微博

https://api.weibo.com/2/statuses/user_timeline.json?source=1105337522//获取用户最新的微博

豆瓣:

http://api.douban.com/v2/user/freestyle21//获取用户信息

http://api.douban.com/shuo/v2/statuses/user_timeline/freestyle21//获取用户时间线

在用jsonp请求数据的时候,只需要把url换成上面的就可以了,然后在回调函数里面处理返回的json数据就好了。

文章的标题叫做抓数据,但是到此为止好像只有请求数据,没有抓。。

 

然后

尽管上面找的那些链接能够完成很多事情,但是,让我不爽的是提供接口的网站并不多。要是我想要虎扑上的比赛数据呢?要是我想要河畔最新的贴子呢?

于是,又开始在网上找可以抓取任意网站数据的方法。在一篇文章中看到了火车头采集器,去下载了。把它的论坛上三个视频看了,感觉这个只是适合站长,不太适合普通开发者。不过功能真的是比较强大。这里不讲了,有兴趣的可以从这里去看下。

然后接着查询。。印象中python和java比较适合干这样的事,但是对这两门语言都不太熟悉,故还是想从熟悉的东西着手。咨询几个朋友,原来php也可以抓取数据~~

查看了几个例子,自己实验了一番,总结如下。

 

通过fopen来读取要抓取的网页

下面的例子来抓取我博客的title

<?php$file = fopen ("http://freestyle21.cn/", "r"); if (!$file) { echo "<font color=red>Unable to open remote file.</font>\n"; exit; } while (!feof ($file)) { $line = fgets ($file, 1024); if (eregi ("<title>(.*)</title>", $line, $out)) { $title = $out[1]; echo "".$title.""; break; } } fclose($file); 
?>  

获取我博客所有代码

<?php$fp = fsockopen("freestyle21.cn", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br/>\n"; } else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: freestyle21.cn \r\n"; $out .= "Connection: Close \r\n\r\n"; fputs($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp); }
?>

通过curl/DOMDocument/DOMXpath抓取数据

上面的那种方式或许还不能叫抓数据。因为对返回的HTML处理不够。 然后,我们知道在php中curl可以抓取下载html(也可以模拟登录,伪装客户端等),DOMDocument可以刚刚下载的HTML加载成DOM,DOMXPath则可以使用XPath语法进行数据的定位和采集。幸运的是,对于前端来说,三个都比较熟悉,所以就比较简单了。

 

抓博客中所有的链接url

<?php$target_url = "http://freestyle21.cn";$ch = curl_init();//执行之前,设置一些参数
    curl_setopt($ch, CURLOPT_URL,$target_url);curl_setopt($ch, CURLOPT_FAILONERROR, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);curl_setopt($ch, CURLOPT_AUTOREFERER, true);curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);curl_setopt($ch, CURLOPT_TIMEOUT, 10);$html = curl_exec($ch);if (!$html) {echo "<br />cURL error number:" .curl_errno($ch);echo "<br />cURL error:" . curl_error($ch);exit;}//创建一个DomDocument对象,用于处理一个HTML$dom = new DOMDocument();//从一个字符串加载HTML@$dom->loadHTML($html);//使该HTML规范化$dom->normalize();//用DOMXpath加载DOM,用于查询$xpath = new DOMXPath($dom);//获取所有的a标签的地址$hrefs = $xpath->evaluate("/html/body//a//@href");for ($i = 0; $i < $hrefs->length; $i++) {$href = $hrefs->item($i);$linktext = $href->nodeValue;echo $linktex;echo "<BR>";}
?>

结果如下;

1

如果想要抓取博客中的“这里记载着帅气的博主的技术成长过程,也会时而发下生活的牢骚”,这几个字,把xpath改成:

$hrefs = $xpath->evaluate("/html/body//div//h2");

如果想要抓取”freestyle21”几个字母,改成:

$hrefs = $xpath->evaluate("/html/body//div//a//h1");

如果想要抓去最下面的描述“一个老男人,今年22岁.一枚程序员,Web前端!一只科蜜,季后赛!”,改成

$hrefs = $xpath->evaluate("/html/body//div//ul//li");

到此,要抓取给定网页的任意数据就比较简单了,最终任务转换到解析DOM。而这,又是没有前端都擅长的~

 

总结

总的来说,用这篇文章中的方法抓取数据都不是最科学的,因为我们必须要读取所以的HTML,这样效率肯定比较低。最科学的方式还是不用下到本地服务器,直接读取。以后有需求了,还是学下Python和Java的抓取方式~~

转载于:https://www.cnblogs.com/freestyle21/archive/2013/05/13/3076039.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_778812.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDC评述网:7月第二周国内域名主机网站Top15

IDC评述网(idcps.com)07月16日报道&#xff1a;据Alexa数据显示&#xff0c;在7月第二周&#xff08;7月8日至7月14日&#xff09;期间&#xff0c;中国万网再以周均用户覆盖数850高居国内域名主机网站榜首。新网和西部数码位列二、三名。用户覆盖数分别为460、370。&#xff0…

网站测试清单

通用 ◇ 所有测试是否运行在干净系统上&#xff1f; ◇ 系统是否正常运行&#xff1f; ◇ 是否显示正确输出&#xff1f; ◇ 系统是否能提供所需功能&#xff1f; ◇ 普通用户是否能轻松地操作该系统&#xff1f; ◇ 是否易学易用&#xff1f; ◇ 系统是否会为客户提供服…

发布内部的普通非加密Web网站

发布内部的普通非加密Web网站&#xff08;2009-1-9&#xff09;实验&#xff1a;发布内部的普通非加密Web网站&#xff08;通过IP地址访问&#xff09;&#xff08;HttpISA ServerHttp&#xff09;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:o…

php抓取网站图片的程序

2019独角兽企业重金招聘Python工程师标准>>> 此程序实现了网页源代码捕获&#xff0c;图片链接获取、分析、并将同样的图片链接合并功能&#xff0c;实现了图片抓取功能。利用php强大的网络内容处理函数将指定的网站上的所有图片抓取下来&#xff0c;保存在当前目录…

让网站不停止,永远持续运行

在公司内部服务器&#xff0c;运行很多网站(应用程序)&#xff0c;但每个网站都有自动化或是定时执行的事务。后来经整合&#xff0c;所有这些自动化或定时执行的事务&#xff0c;都移至一个单独的站点(asp.net)。这个站点&#xff0c;只要服务器没有关机&#xff0c;重启。它永…

张百川:“知道”网站安全体检初体验

昨天游侠写过一篇文章 [关于几个免费在线挂马检测网站] &#xff0c;说到了北京知道创宇公司的“知道网站安全体检中心”&#xff0c;他们的工作人员很及时的给我发了个内测账号&#xff0c;这里大体说下。当然网址是 http://www.scanv.com 大家可以去申请内测账号。流程基本是…

HTML5网站大观:12个精美的 HTML5 个人网站欣赏

本期的 HTML5 网站大观要与大家分享12个精美的 HTML5 个人网站作品。HTML5 是现在Web开发领域的热点&#xff0c;更多的开发人员开始使用HTML5来开发交互性强、效果出众的Web应用和游戏。希望这些 HTML5 网站实例能帮助大家更好的学习HTML5网站制作。 Tim Potter Henry Brown M…

在地址栏加上网站的标志、LOGO图片

为什么80%的码农都做不了架构师&#xff1f;>>> 第一步&#xff1a;首先你必须要制作一个看起来既清楚又容易辨识的.ico格式的小图片。 我们将图标的大小定义为16x16 像素。此外在制作图形文件的时候&#xff0c;你可能需要把色盘设定成只使用标准的 16 色 Windows…

Centos linux 下配置 apache ,创建虚拟网站访问路径

2019独角兽企业重金招聘Python工程师标准>>> 修改 httpd.conf 文件编辑&#xff1a; vim /etc/httpd/conf/httpd.conf添加内容&#xff1a; Alias /bieming "/opt/www" <Directory "/opt/www"> Options Indexes MultiViews …

网站挂马检测

2019独角兽企业重金招聘Python工程师标准>>> 网站挂马检测 在最近的一次网站优化项目中&#xff0c;我负责的一个网站出现了网站被挂马问题&#xff0c;所以网站的关键词排名很快就从首页消失了。把网站挂马问题解决后&#xff0c;花费了很多的精力才让关键词排名恢…

[Pholcus爬虫] 应对网站反爬虫的多项策略

2019独角兽企业重金招聘Python工程师标准>>> Pholcus应对网站反爬虫的核心思想就是&#xff1a;模仿人工操作 具体应对策略如下&#xff1a; 两次请求之间进行随机暂停 &#xff0c;该时间可以在操作界面设置当不需缓存cookie时&#xff0c;设置Spider.EnableCookie…

创建个人网站

微信公众号&#xff1a;Android部落格 个人网站&#xff1a;chengang.plus 1、方案 采用Github Pages Jekyll的方式。 2、安装Jekyll环境 2.1 安装Ruby 因为网络的原因&#xff0c;Ruby installer安装文件难得下载&#xff0c;下载网址是&#xff1a; https://rubyinstall…

播放rtmp在线网站及播放器

2019独角兽企业重金招聘Python工程师标准>>> 网站地址 http://www.cutv.com/demo/live_test.swf 推流地址 rtmp://ip:8005/live/32010020160918113426717107expxqe 或者采用flash player 也可以 -----------------------------------------------------------------…

跟着百度学PHP[14]-COOKIE的应用/网站登陆案例完整案例

先在数据库当中创建以下数据&#xff1a; mysql> create table user(-> id int not null auto_increment,-> username varchar(50) not null default ,-> password char(32) not null default ,-> email varchar(80) not null default ,-> allow_1 smallint …

网站加速哪家强?四大免费CDN服务评测大PK

之前我把市场上主流的、适合站长用的CDN都介绍了一遍&#xff0c;但随着加速乐与百度分家&#xff0c;百度自家推出云加速后&#xff0c;市场格局再度发生变化。本文&#xff0c;将结合卢松松的亲身体验&#xff0c;来对比360网站卫士、百度云加速、加速乐、安全宝&#xff0c;…

阿里云系列——3.网站备案初步核审(详细步骤)---2015-11.12

网站部署之~阿里云系列汇总 http://www.cnblogs.com/dunitian/p/4958462.html 流程图&#xff1a; 1.注册账号 进&#xff1a;https://beian.gein.cn/account/login.htm 注册一个账号&#xff0c;然后会收到邮件 立即备案 如何办理首次备案&#xff1f;如果您从未办理过备案&am…

WordPress 多站点建站教程(七):多站点函数

1、get_blog_details&#xff08;获取子站点信息&#xff09; 返回多站点博客信息即wp_blogs表。 //显示站点名称 $blog_details get_blog_details(1); echo Blog .$blog_details->blog_id. is called .$blog_details->blogname..;//显示站点总文章数 $blog_details ge…

百度蝶变SEO获奖诊断书分享

导读&#xff1a;这篇诊断书是百度蝶变行动SEO诊断中获奖的14篇中的一篇&#xff0c;诊断的站点本来就是高质量站点&#xff0c;所以可以称此诊断书是SEO进阶版&#xff0c;希望里面的一些SEO建议可以为站长带来帮助&#xff01;百度专家团点评&#xff1a;本届蝶变行动百度着重…

****一步步构建大型网站架构

之前我简单向大家介绍了各个知名大型网站的架构&#xff0c;MySpace的五个里程碑、Flickr的架构、YouTube的架构、PlentyOfFish的架构、WikiPedia的架构。这几个都很典型&#xff0c;我们可以从中获取很多有关网站架构方面的知识&#xff0c;看了之后你会发现你原来的想法很可能…

zabbix实战监控WEB网站性

我们怎么用zabbix监控web性能和可用性呢&#xff1f;我们这边分为几个步骤&#xff1a;打开网站、登陆、登陆验证、退出&#xff0c;一共4个小step。检测流程1. 打开网站&#xff1a;如果http code为200&#xff0c;并且响应的html中包含Zabbix SIA表示打开成功&#xff08;zab…