webmagic爬取渲染网站

news/2024/5/11 21:09:20/文章来源:https://blog.csdn.net/weixin_33782386/article/details/94624941

最近突然得知之后的工作有很多数据采集的任务,有朋友推荐webmagic这个项目,就上手玩了下。发现这个爬虫项目还是挺好用,爬取静态网站几乎不用自己写什么代码(当然是小型爬虫了~~|)。好了,废话少说,以此随笔记录一下渲染网页的爬取过程首先找到一个js渲染的网站,这里直接拿了学习文档里面给的一个网址,http://angularjs.cn/

打开网页是这样的

查看源码是这样的

 

源码这么少,不用说肯定是渲染出来的了,随便搜了一条记录,果然源码里面找不到结果

那就开始解析网址了,从浏览器开发者工具里面发现了这么些请求记录

就直接从得到的数据量最大的请求开始查看,如上红线标记的。从xhr看出这是个ajax请求来的数据,打开请求的数据是这样的

 

 从网页上找一条源码里面找不到的记录,放在这个json数据里面搜索一下,运气还是不错的,搜索到了

 

那不用说,就是它了!!接下来直接解析这个json就能拿到所有渲染后的链接了。

从网页直接点击一个链接进入,发现链接是这样的:

 

 然后回到json文件,找到这个标题

 

找到一个很了不起的东西!就是那个id,它就是链接后面带的。大胆推测,所有链接都是这个尿性!!(事实上我多点了几个链接看才敢确认这个尿性)

接下来就好办了,写代码解析这个json数据,然后拼凑出所有链接加入爬取队列爬取就行了。

结果发现通过首页链接点进去的下级链接,还是js渲染的。。。

没办法,拿着链接请求继续分析

得到这么些请求数据:

直接看到xhr栏,也就是ajax请求的数据

依旧从大到小查看json数据,和页面的内容匹配,直到第三个才找到正确的。++|

然后得到了最终数据的请求链接:http://angularjs.cn/api/article/A2KW

接下来就可以写代码了:

 1 public class SpiderTest implements PageProcessor {
 2     // 抓取网站的相关配置,包括编码、抓取间隔、重试次数等
 3     private Site site = Site.me().setRetryTimes(3).setSleepTime(100);    
 4     // 先从浏览器中分析出隐藏请求可得出以下匹配规则
 5     private static final String URLRULE = "http://angularjs\\.cn/api/article/latest.*";
 6     private static String firstUrl = "http://angularjs.cn/api/article/";
 7     
 8     @Override
 9     public Site getSite() {
10         // TODO Auto-generated method stub
11         return site;
12     }
13 
14     @Override
15     public void process(Page page) {
16         // TODO Auto-generated method stub
17         /**
18          * 筛选出所有符合条件的url,手动添加到爬取队列。
19          */
20         if (page.getUrl().regex(URLRULE).match()) {
21             //通过jsonpath得到json数据中的id内容,之后再拼凑待爬取链接
22             List<String> endUrls = new JsonPathSelector("$.data[*]._id").selectList(page.getRawText());
23             if (CollectionUtils.isNotEmpty(endUrls)) {
24                 for (String endUrl : endUrls) {
25                     page.addTargetRequest(firstUrl + endUrl);
26                 }
27             }
28         } else {
29             //通过jsonpath从爬取到的json数据中提取出id和content内容
30             page.putField("title", new JsonPathSelector("$.data.title").select(page.getRawText()));
31             page.putField("content", new JsonPathSelector("$.data.content").select(page.getRawText()));
32         }
33         
34     }
35     
36     @Test
37     public void test(){        
38         Spider.create(new SpiderTest()).addUrl("http://angularjs.cn/api/article/latest?s=20").run();
39     }
40 }

至此一个渲染的网页就爬取下来了。over

转载于:https://www.cnblogs.com/luojiangwen/p/7504054.html

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

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

相关文章

php网站禁止右键,如何在自己网站设置屏蔽右键防复制

很多网站原创的内容会被恶意复制&#xff0c;或者自己有版权的东西不希望被别人转载&#xff0c;可以在自己做网站时可以增加防复制&#xff0c;禁止右键的功能&#xff0c;也可以达到网站文章复制自动加版权信息的功能。方法/步骤在网站的标签里加上一段JS代码&#xff0c;这样…

一个非常强大的静态导航网站nav

什么是发现导航&#xff1f; 一个纯静态、支持SEO、在线编辑的强大导航网站&#xff0c;内置收录多达 800 优质网站。 &#x1f370; 内置 800 实用网站。&#x1f370; 支持 SEO。&#x1f370; 完全纯静态, 提供自动化部署功能。&#x1f370; 三叉树分类、结构清晰、分类清晰…

网站在线监控工具Uptime Kuma

如果你有多个服务或者多台服务器&#xff08;包括群晖或者vps&#xff09;在运行&#xff0c;就需要一个在线监控工具来协助管理&#xff0c;提高可用性&#xff0c;防止因为服务器、程序错误等原因导致网站无法访问。如果只是自己用问题不大&#xff0c;但是如果是对外提供服务…

境外服务器网站 域名,境内服务器与境外服务器的域名区别

境内服务器与境外服务器的域名区别 内容精选换一换通过本文档&#xff0c;您可以快速了解华为云CDN的基础知识&#xff0c;如果想了解更多详细信息&#xff0c;可以根据扩展阅读的引导来进行阅读。CDN(Content Delivery Network&#xff0c;内容分发网络)是构建在现有互联网基础…

网站存档服务ArchiveBox

今天是老苏居家隔离的第 43 天。 周四除上午&#xff0c;下午各一次抗原外&#xff0c;上午还做了一次核酸&#xff1b;周五上午两个抗原&#xff08;间隔 4 小时&#xff09;&#xff0c;下午1点还有一次核酸。 现在核酸也不像之前&#xff0c;一栋一栋通知下楼&#xff0c;…

跳转页面而不改变地址_域名301跳转,对SEO有什么影响?

在SEO优化过程中&#xff0c;经常会遇见搭建新站的情况&#xff0c;搭建完毕后&#xff0c;面临的问题则是如何改变域名使之指向到新网站。通常这种情况我们会运用“301跳转”&#xff0c;那么&#xff0c;进行跳转是否会影响到网站优化呢?一、跳转与权重一般来说&#xff0c;…

网站在线监控工具Statping

本文完成于 8 月&#xff0c;特别需要说明的是&#xff0c;Statping 已经有 2年没更新了&#xff0c;介意的话看看就好了。 什么是 Statping &#xff1f; Statping 是一个易于使用的状态页面&#xff0c;能自动获取应用程序的信息&#xff0c;并呈现具有大量功能的漂亮状态页面…

php怎么变成网站,php网站怎么跳转网页

php怎么跳转网页的三种方法&#xff1a;header()函数header()函数是PHP中进行页面跳转的一种十分简单的方法。header()函数的主要功能是将HTTP协议标头(header)输出到浏览器。header()函数的定义如下&#xff1a;(推荐学习&#xff1a;PHP编程从入门到精通)void header (string…

安卓电子书格式_好学习、求向上 | 转换各类文件格式?一个网站就够了

点击上方 信息化教学创新 订阅本刊小格我想把pdf转成word。小式嗯&#xff0c;Adobe acrobat支持。小格我想把WMA转成mp3。小式嗯&#xff0c;可以用Online Audio Converter试试。小格我想把AVI转成mp4。小式嗯&#xff0c;可以下载一个格式工厂。小格……请输入文字图、文、…

php自动识别pc和手机端并跳转,JS如何实现网站中PC端和手机端自动识别并跳转对应的代码...

1. 代码场景&#xff1a;描述&#xff1a;在项目中&#xff0c;一般我们会使用响应式布局的方式或者借助bootstrap等插件来做响应式的网站。但是根据业务的需求&#xff0c;手机端可能会在功能上精简很多&#xff0c;我们也会写两套代码&#xff0c;分别用来实现PC端和手机端的…

跨境电商自建站后台系统原型rp_Shoptago---跨境电商平台又一个新选择

在去年邀请2000卖家参与内测的跨境电商自建站平台Shoptago&#xff0c;现在用户数已经达到了3850&#xff0c;成绩可谓&#xff0c;我们也能在各大媒体看到Shoptago相关的新功能上线公告&#xff0c;那么在这段时间里&#xff0c;Shoptago究竟差生了什么变化&#xff1f;这个新…

java web实现博客系统_JavaWeb_gy博客网站_系统实现

目录1、com.jiguiyan.blog  启动层2、com.jiguiyan.blog.config  配置层3、com.jiguiyan.blog.controller  控制器层4、com.jiguiyan.blog.domain  实体层5、com.jiguiyan.blog.dto  数据传输层6、com.jiguiyan.blog.enumeration  枚举层7、com.jiguiyan.blog.filt…

网站一直优化不动,是不是被惩罚?

SEO是一个千变万化的工作&#xff0c;你的每一个优化策略&#xff0c;都决定网站不同的走向&#xff0c;在很长一段时期中&#xff0c;我们通常会遇到各种问题&#xff0c;比如&#xff1a;网站一直优化不动。 长期停留在某个阶段&#xff0c;这让SEO人员&#xff0c;显得无所…

linux运维搭建官网,Linux运维学习之LAMP搭建个人博客网站

Linux运维学习之LAMP搭建个人博客网站个人博客、lamp从开始学习Linux&#xff0c;我就知道搭建博客&#xff0c;也很好奇怎么搭建的博客&#xff0c;今天终于学到了这个知识点&#xff0c;网上的很多的教程感觉都是含糊其辞&#xff0c;对于基础稍微有点薄弱的&#xff0c;根本…

学习计算机安全只知识网站,计算机安全教案

计算机安全教案教材分析本节课陕西省九年义务教育九年制初级中学教科八年级(上册)信息技术&#xff0c;第一章《计算机系统》第六节《计算机安全》的内容&#xff0c;本节内容具有较大的现实意义和教育意义。本节是第一章《计算机系统》的最后一节&#xff0c;内容以理论知识形…

网站改成静态页面打不开_营销型网站建设的六大要点

营销型网站建设的六大要点&#xff01;这是我们行业内必看的一些东西&#xff0c;希望对大家有帮助~~第一点、全站伪静态&#xff0c;SEO设置设置前台能看到的页面全部伪静态的方式。这样随便搜索个手机的型号前几名都是静态或者伪静态的页面。网站的地图。301重定向即是将网络…

h5实现扫一扫功能_H5响应式网站制作有哪些好处?

网站制作一年350元&#xff0c;五站合一&#xff0c;快速建站 &#xff0c;www.sxjcwzjs.com,只需进入网站右上角注册快速建站即可(需要电脑登录注册)&#xff0c;需要联系我吧&#xff01;电话&#xff1a;13752214574&#xff0c;微信号&#xff1a;m10785828941.H5网站高端大…

服务器搜索文件太慢,网站加载速度慢?3步排查找原因

原标题&#xff1a;网站加载速度慢&#xff1f;3步排查找原因网站管理员在运营网站时往往绕不开一个关键性问题&#xff0c;那就是网站的加载速度。当网站一切就绪&#xff0c;自认为各处配置设计无懈可击时&#xff0c;真正浏览网站时却如遭当头一棒&#xff0c;页面加载的“龟…

利用git把本地网站提交到码云新建仓库中

&#x1f633;在网站根目录右键---Git Bash Here &#x1f633;若是第一次利用git提交&#xff0c;请配置好全局选项 git config --global user.name "用户名" git config --global user.email "创建的邮箱地址" &#x1f633;初始化仓库 git init &…

功能测试常用6种方法_网站推广的6种有效方法

作为一名合格的站长要想去长久的远营一个网站&#xff0c;就需要不断的增加你的网站流量&#xff0c;不断的增加你网站的询盘量&#xff0c;那么你就需要懂得网站推广的一些方法了&#xff0c;网站推广的方法有非常的多&#xff0c;几乎每一种网站推广方法&#xff0c;对于网站…