从其他网站抓数据

news/2024/5/14 3:03:05/文章来源:https://blog.csdn.net/weixin_34132768/article/details/93462390

缘由

吃饭的时候和朋友聊天,谈到他上一个项目,他去抓其他网站的数据,然后用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_740929.aspx

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

相关文章

内网https需要ssl证书_这些行业需要SSL证书来保障网站安全

无论是工作还是生活需要&#xff0c;我们每天都会访问各种网站。这些网站都是安全的吗?答案自然是否定的。为了确保网站的基本安全&#xff0c;部署SSL证书是关键的一步。那么对于成千上万的行业&#xff0c;哪些行业需要SSL证书&#xff1f;1、银行金融、电子商务企业这种行业…

IE无法打开internet网站已终止操作的解决的方法

用IE内核浏览器的朋友&#xff0c;或许不经意间会碰到这样滴问题&#xff1a;打开某个网页时&#xff0c;浏览器“嘣”跳出一个提示框“Internet Explorer无法打开Internet 站点...已终止操作”。而大多数情况下该页面甚至非常可能看起来已经载入完成&#xff0c;内容能够全然显…

ASP.NET网站管理工具的【安全】功能无法使用问题

在使用ASP.NET网站管理工具时&#xff0c;安全出现下面的问题&#xff1a; 出现这种情况的主要原因是&#xff0c;安全管理中需要创建用户和角色信息&#xff0c;所以要用到数据库&#xff0c;但是你没有设置好数据库。 可以打开vs自带的命令提示工具&#xff1a; 打开后输入as…

网站服务器上加入三层开发的网站错误解决

在网站服务器上添加三层开发的网站&#xff0c;发现网站打开的时候提示Server Error in / Application.截图如下 解决办法&#xff1a; 1,把文件夹中的bin文件夹移动到上一目录下&#xff0c;比如放入该文件的路径是root根目录&#xff0c;然后新建test目录&#xff0c;上传网站…

使用Apache服务部署静态网站

动手安装Apache服务程序。注意&#xff0c;使用yum命令进行安装时&#xff0c;跟在命令后面的Apache服务的软件包名称为httpd。如果直接执行yum install apache命令&#xff0c;则系统会报错&#xff1a;yum install httpd启用httpd服务程序并将其加入到开机启动项中&#xff0…

什么平台拥有高优质的网络推广网站?

在互联网时代&#xff0c;互联网已经渗入到了各种传统的信息传播渠道&#xff0c;尤其是移动互联网时代的到来&#xff0c;普通用户获取的信息变得纷繁多样。从而也促进了新的运营模式孕育而生&#xff0c;诸如新闻营销&#xff0c;它凭借权威、可信度高、传播速度快等独特优势…

中小企业如何选择建站公司

如何选择一家适合自己的网站建设公司&#xff1f;这是每一个准备做网站的公司都关心的话题。对于刚起步资金不雄厚的公司&#xff0c;价格低、能实现简单的功能就可以&#xff0c;那是不是意味着哪个公司做都一样&#xff0c;只看价格呢&#xff1f; 但是这样的网站真的值几百吗…

apache伪静态把css 排除掉_MVC架构网站URL访问原理及伪静态的区分

0x00 前言这是一篇简单易理解的文章.文章目录如下:0x01 什么是MVC(了解)0x02 ThinkPHP5目录理解(了解)0x03 ThinkPHP5多个配置文件关系(了解)0x04 一个URL访问请求的执行流程(重点)0x05 .htaccess文件的作用(入口文件的隐藏)0x06 前后端传参(重点)0x07 伪静态(重点)为什么这个网…

百度mip推送工具_【SEO】利用网页监控来做百度同步推送

百度主送推送&#xff08;实时&#xff09;是在百度站长工具改版升级之后推出的一款帮助站长快速向百度提交链接的工具&#xff0c;有助于让百度快速发现新链接&#xff0c;促进网站收录。它是所有提交方式里面最为快速的一种&#xff0c;建议站长将站点当天新产出链接立即通过…

10设置精美的免费网站后台管理系统模板

虽然转移。但好东西不应该是沉默 原文地址&#xff1a;http://www.cnblogs.com/lhb25/archive/2012/10/19/10-free-html-admin-templates.html 免费下载点&#xff1a;http://download.csdn.net/detail/yangwei19680827/7324845 Admin Panel Template 这个后台管理模板的导航设…

刚学编程的程序员必备这5大编程网站,你知道几个?

一个好的网站&#xff0c;就是程序员学编程的基地。虽说新手程序员也许知道一些在线编程网站&#xff0c;但是质量上乘的编程网站又知道几个呢?下面就来给大家推荐5个质量上乘的编程网站&#xff1a;0、LeetcodeLeetCode是大名鼎鼎的在线刷题网站&#xff0c;通过该网站的刷题…

Linux系统下利用wget命令把整站下载做镜像网站

Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论&#xff1a;0 条 | itokit 在linux下完整的用wget命令整站采集网站做镜像 的命令是及无视网站根目录下的robots.txt限制。并且可以模拟一个正常浏览者的信息下载该网站。 C/C Code复制内容…

业余草站长告诉你:网站被克隆了怎么办?

最近在准备考试&#xff0c;想考一个信息系统项目管理师的证书&#xff0c;也就是大家所说的软考。有了这个证书呢&#xff0c;据说有很多好处&#xff0c;我闲着没事就报了名&#xff0c;而我的个人网站也没时间进行搭理了。今天百度了一下我的网站&#xff0c;结果出来一个新…

html仿游戏网站首页面

从CSDN上找到的资源&#xff0c;内含psd格式的图片文件&#xff0c;原出处已经找不到&#xff0c;希望作者看到之后觉得影响不好请联系我&#xff0c;我会做及时的处理。 这是第二篇练手的网站&#xff0c;较之第一篇无本质区别&#xff0c;只为熟悉html5css的使用。该网页没有…

bootstrap仿婚纱摄影网站首页

效果图如下&#xff1a; 代码如下&#xff1a; html&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"utf-8"> <meta name"description" content"凤凰社是一个分享感动的地方">…

关于大型网站技术演进的思考(十三)--网站静态化处理—CSI(5)

讲完了SSI&#xff0c;ESI&#xff0c;下面就要讲讲CSI了 &#xff0c;CSI是浏览器端的动静整合方案&#xff0c;当我文章发表后有朋友就问我&#xff0c;CSI技术是不是就是通过ajax来加载数据啊&#xff0c;我当时的回答只是说你的理解有点片面&#xff0c;那么到底什么是CSI技…

360极速浏览器打不开国内网站的一种解决方法

360极速浏览器打不开国内网站的一种解决方法一、问题描述二、解决办法一、问题描述 点击东北大学官方网站&#xff0c;显示您访问的网页出错了。 二、解决办法 点击右上角的三横线的图标——代理服务器——不使用代理服务器——重新打开浏览器。

小程序-下载bing网站壁纸并设为桌面

目的&#xff1a;下载cn.bing.com或http://www.bing.com/的背景图片&#xff0c;并将其设为壁纸 思路&#xff1a;根据用户输入的地址&#xff0c;首先下载对应网址的页面并解析其中的图片地址。接着下载图片&#xff0c;调用系统api将其设为壁纸。其中的下载都使用socket来实现…

LNMP网站架构方案分析

2019独角兽企业重金招聘Python工程师标准>>> LNMP&#xff08;Linux-Nginx-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Nginx网络服务器&#xff0c;MySQL数据库&#xff0c;PHP编程语言&am…

php网站留言,php实现网站留言板功能

php实现网站留言板功能发布于 2016-01-14 09:57:49 | 1045 次阅读 | 评论: 10 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点&#xff0c;…