webmagic爬取渲染网站

news/2024/5/14 12:09:22/文章来源:https://blog.csdn.net/lx520aa/article/details/77946407

最近突然得知之后的工作有很多数据采集的任务,有朋友推荐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

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

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

相关文章

Roslyn导致发布网站时报错-编译失败

最近新升级了Visual Studio 2017&#xff0c;创建的Web项目Bin目录中多了一个叫roslyn的文件夹&#xff0c;该文件夹导致网站在某些服务器上发布出错 从网上搜索了一下&#xff0c;Roslyn是新出的动态编译工具 但是在服务器上安装.net4.6后仍然提示编译出错。 解决方法&#x…

搜索引擎优化(SEO)新手指南(超实用)

from&#xff1a;http://www.kenengba.com/post/556.html这个指南不会告诉你如何能在Google排第一位&#xff0c;但能使你的网站或博客对浏览者和搜索引擎更友好。 一、使用独特的、准确的标题 不管对于浏览者还是搜索引擎来说&#xff0c;标题对于一个网站是非常重要的。而标题…

浏览英文网站必会的100个词汇

许多人刚开始接触纯英文网站的时候&#xff0c;看到满版的英文&#xff0c;不免有些望而却步&#xff0c;其实浏览英文网站并没有想象中的那么难&#xff0c;只要你掌握了基本的一些词汇&#xff0c;很快就会寻得一些浏览规律&#xff0c;今天要给大家介绍一些在浏览是使用英文…

常用的开源社区网站和面试刷题网站

1、GitHub&#xff08;https://github.com/&#xff09; 全球最大开源社区。 2、码云&#xff08;https://gitee.com/&#xff09; 可以看做GitHub的国内版。 3、LeetCode&#xff08;https://leetcode-cn.com/&#xff09; 经典的刷题网站&#xff0c;主要是算法题。 4、LintC…

自建CA给内部网站颁发SSL证书

Windows Server - 建设篇 第二章 自建CA给内部网站颁发SSL证书Windows Server - 建设篇系列文章回顾下章内容前言实施步骤Openssl申请证书签发请求&#xff08;带SAN扩展属性&#xff09;参考来源系列文章回顾 第一章 Windows Server 2016搭建企业CA证书服务 下章内容 第三章…

Saleor:开源、免费的无头电子商务平台——系列教程,快速打造属于你的电商网站

Saleor&#xff1a;开源、免费的无头&#xff08;Headless eCommerce&#xff09;电子商务平台 项目&#xff1a;saleor stars&#xff1a;6.7k 简介&#xff1a;开源的无头&#xff08;Headless eCommerce&#xff09;电子商务平台&#xff08;商城&网店&#xff09; 官网…

React项目全球新闻发布管理系统 - 新版问题解决方式整理及部署网站至 Netlify

整理了一下新版的变化以及遇到的坑的解决办法&#xff0c;最后也会分享将网站及接口部署的方式。 千锋前端-React全家桶_React项目全球新闻发布管理系统 https://www.bilibili.com/video/BV1fw411d7R5 文章目录P4P5P6P11P15P17P18P22P29P30P34P38P41P43P45P50P67进阶: 多语系网…

网站图片都有规格、质量大小限制,如何处理图片的规格、大小呢?

对于网站运营图片都有相应的尺寸规格限制&#xff0c;比如常见的如下图&#xff1a; 1、大背景&#xff1a;尺寸不限&#xff0c;但图案最好不要太大太复杂 2、页眉背景&#xff1a;尺寸为770*40px&#xff08;px为像素单位&#xff09;&#xff0c;图案自己选 3、标题背景&…

老馒头修图网的故事,网站经营的心路历程

也许你是第一次听说老馒头修图网&#xff0c;它并不是什么神奇的网站&#xff0c;只是一个普通的图片处理网站&#xff0c;可以帮助网友在线快速修剪图片、压缩图片等。从图片处理的资历来讲&#xff0c;老馒头修图网是个不折不扣的新人&#xff0c;没有强大的背景&#xff0c;…

公司文员上传团建图片到网站的坎坷小道

作为一个公司文员&#xff0c;大部分时间都在处理公司接待、收发快递、协助行政杂务&#xff0c;没怎么接触过系统也不太懂得网站后台操作。公司团建回来&#xff0c;我又多了份新活&#xff0c;那就是将团建图片上传到公司官网&#xff0c;本来觉得不是什么难的事情&#xff0…

王者网站想以php结尾,玩王者荣耀,我用PHP分析了选英雄的那些事儿……

原标题&#xff1a;玩王者荣耀&#xff0c;我用PHP分析了选英雄的那些事儿……选英雄的那些事儿&#xff0c;你可能会想到到什么.....这里所介绍的是王者荣耀里关于英雄的各种“最”&#xff0c;这里分析的都是英雄自身属性及资料&#xff0c;不涉及玩家操作的成分。作 为目前最…

如何在局域网服务器部署网站,局域网如何对服务器配置

在局域网中&#xff0c;我们如何对服务器进行配置呢?学习啦小编为大家整理了相关内容&#xff0c;供大家参考阅读!局域网内对服务器进行配置的方法首先打开电脑的控制面板&#xff0c;点击控制面板中的卸载程序。2这时候进入了程序与功能对话框&#xff0c;点击右边栏中的启用…

大型门户网站架构服务部署研究说明

笔者经常被朋友问起&#xff0c;该如何设计一个大型的门户网站架构。目前中小型网站&#xff0c;由于数据量相对来说比较少&#xff0c;特别是普通的企业网站&#xff0c;几乎没有什么人访问&#xff0c;因此&#xff0c;大部分都是单机版的服务架构&#xff0c;即&#xff1a;…

搭建网站运行环境

云上部署WordPress网站 步骤&#xff1a; 安装与服务器ECS安装和配置开发环境&#xff1a;Web服务器、数据库等部署WordPress网站&#xff1a;下载安装包、安装和配置WordPress 1&#xff09; 安装与服务器ECS 略 2&#xff09;安装和配置开发环境&#xff1a;Web服务器、数…

【服务器架构】大型网站结构介绍

大型网站架构介绍 特点&#xff1a;高并发、大流量、高可用、海量数据。 目录 大型网站架构介绍 1、初始阶段的网络架构 2、应用服务和数据服务分离 3、使用缓存改善网站性能 4、使用应用服务器集群改善网站的并发处理能力 5、数据库读写分离 6、使用反向代理和CDN加上…

Webbench网站压测工具

Webbench是一个在Linux下使用的非常简单的网站压测工具。他本身是一个单进程&#xff0c;使用fork()模拟多个客户端同时访问我们设定的url&#xff0c;用来测试网站在压力下的性能。最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写&#xff0c;源码只有…

网站建设之HTML中用表格实现课程表

效果图&#xff1a; 代码&#xff1a; <html> <title>课程表</title> <head> </head> <body> <font size5><center>课程表</center></font> <table align"center" border"1px" bordercol…

网站建设之HTML中用表单和表格嵌套实现会员注册表

效果图&#xff1a; 代码&#xff1a; <html> <head> <title>注册页面</title> </head> <body> <form name"register" action"url" method"get"> <table border"2" align"center&…

网站建设之CSS中用类选择器实现登录表单

效果图&#xff1a; 代码&#xff1a; <html> <head> <title>登录页面</title> <style type"text/css"> .box1{border:solid 2px purple;} .box2{border:solid 2px red;} </style> </head> <body> <form name&q…

网站建设之CSS中用id选择器和伪类选择器实现简单的导航栏

效果图&#xff1a; 代码&#xff1a; <html> <head> <title>导航</title> <style type"text/css"> #menu{width:600px;height:50px;background-color:#ff0;margin:0 auto;} #menu ul{list-style:none;} #menu ul li{width:100px;hei…