webmagic爬取渲染网站

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

时间: 2024-10-29 06:36:14

webmagic爬取渲染网站的相关文章

webmagic爬取博客园所有文章

最近学习了下webmagic,学webmagic是因为想折腾下爬虫,但是自己学java的,又不想太费功夫,所以webmagic是比较好的选择了. 写了几个demo,源码流程大致看了一遍.想着把博客园的文章列表爬下来吧. 首页显示的就是第一页文章的列表, 但是翻页按钮不是链接,而是动态的地址: 实际请求的地址及参数: 针对这个动态页面的情况,有两种解决方案: 1. webmagic模拟post请求,获取返回页面. 1 public class CnblogsSpider implements Pa

python爬取某个网站的图片并保存到本地

python爬取某个网站的图片并保存到本地 #coding:utf-8 import urllib import re import sys reload(sys) sys.setdefaultencoding('gb2312') #获取整个页面的数据 def getHtml (url): page = urllib.urlopen(url) html = page.read() return html #保存图片到本地 def getImg(html): reg = r'src="(.+?\.

python爬虫--爬取某网站电影下载地址

前言:因为自己还是python世界的一名小学生,还有很多路要走,所以本文以目的为向导,达到目的即可,对于那些我自己都没弄懂的原理,不做去做过多解释,以免误人子弟,大家可以网上搜索. 友情提示:本代码用到的网址仅供交流学习使用,如有不妥,请联系删除. 背景:自己有台电脑要给老爸用,老爷子喜欢看一些大片,但是家里网络环境不好,就想批量下载一些存到电脑里.但是目前大部分的网站都是这样的, 需要一个个地点进去,才能看到下载地址 如果我要下载100部电影,那肯定手都要点断了,于是便想把这些地址给爬取出来,

使用selenium + Chrome爬取某网站乌云公开漏洞文章并保存为pdf文件

目的:使用selenium + Chrome爬取某网站指定类型的乌云公开漏洞文章,即在win10终端输入漏洞类型(如未授权),则爬取所有该类型的漏洞文章,并把每个分页的数字作为文件夹名,来保存该分页下面的所有的漏洞文章. 总结:本例只是能简单的爬取某一类型漏洞的所有文章,但不能爬取多个类型漏洞的所有文章,有时可能会有一些小bug导致没爬取完就崩溃,需要手工修改进而重新爬.其它问题解决看注释. 关于python代码里面出现中文在windows里面的处理,还没完全掌握.可参考Python for W

python爬虫-基础入门-爬取整个网站《3》

python爬虫-基础入门-爬取整个网站<3> 描述: 前两章粗略的讲述了python2.python3爬取整个网站,这章节简单的记录一下python2.python3的区别 python2.x 使用类库: >> urllib 库 >> urllib2 库 python3.x 使用的类库: >> urllib 库 变化: -> 在python2.x中使用import urllib2 ----- 对应的,在python3.x 中会使用import url

爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head><meta http-equiv="X-UA-Compatible" content="IE=Edge" /><meta http-equiv="Content-Type" content="text/html; c

树莓派上使用webmagic抓取CSDN网站4万7千篇文章配合word分词库进行词频统计

一. 使用的开源库 爬虫:https://github.com/code4craft/webmagic.git 分词:https://github.com/ysc/word.git 本项目:https://github.com/umbrellary/beatles.git 二. 操作过程 进行编译 1 git clone https://github.com/umbrellary/beatles.git 2 cd beatles 3 make 运行爬虫爬取文章 1 cd build 2 java

Python练习【爬取银行网站信息】

功能实现 爬取所有银行的银行名称和官网地址(如果没有官网就忽略),并写入数据库: 银行链接: http://www.cbrc.gov.cn/chinese/jrjg/index.html 编程思路 1.利用url访问页面并获取页面信息 2.利用正则表达式对页面信息进行筛选,获取我们需要的信息 3.保存至Mysql数据库中 1.获取网页信息并保存至文件 from urllib.request import urlopen # 获取页面信息 def getPageInfo(url): pageInf

scrapy框架来爬取壁纸网站并将图片下载到本地文件中

首先需要确定要爬取的内容,所以第一步就应该是要确定要爬的字段: 首先去items中确定要爬的内容 class MeizhuoItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() # 图集的标题 title = scrapy.Field() # 图片的url,需要来进行图片的抓取 url = scrapy.Field() pass 在确定完要爬的字段之后,就是分析网站页面的请求