夜凉如水,苍穹下,秋叶舞。
天桥下川流不息的斑斓车灯,人来人往的十字街角,喧嚣与繁华的城。
我需要看看小姐姐的图片,好好感受下这世界的温柔以待。
私信小编007或者01即可获取数十套PDF或者零基础入门资料一套哦!
按照爬虫的基本规律:
1.找到目标
2.抓取目标
3.处理目标内容,获取有用的信息
1.我们的目标是: http://gifcc.com/forum.php
这个网站呢,是一个论坛式网站,里面分了几大类,反正试试各种动图。
我们的目标呢,就是找到这(收)些(藏)动(到)图(自)的(己)地(电)址(脑).
2.看看各个模块的网址,有什么规律
对,没错,如果以游客的身份进行访问,那么各个模块的网址就是这样的形式:http://gifcc.com/forum-XX-1.html
1.获取入口页面内容
即根据传入的URL,获取整个页面的源码
这里我们使用了webdriver以及PhantomJS这些模块,为什么呢?因为网页是动态加载的,这样可以抓取的数据全一点。
2.获取页码数
这里的页码处理用到了一个模板pq,采用PyQuery的方式查找我们需要的元素,感觉更好处理一点,挺方便的
同时这里的处理稍微有点意思,如果观察这个页面的话,会发现,每个模板的页码,在上面和下面都有一个,然后
我这里截取的一下,因为我们只需要一个页码数字即可
3-6 第三步到第六步一起来说
其实就是根据页码数,来进行遍历,获取到每一页的内容
然后得到每一页中的所有图片地址
在进行获取每一页的内容的时候,需要重新组装页面地址。
有了新的地址,就可以获取当前页面的内容,并进行数据处理,得到每一张图片的地址列表
在获取到图片列表后,再次解析,获取每一张图片的URL
将图片存到本地,以及将数据写入数据库
到这里其实大体的内容已经完成了,我们能够将这个论坛的各个模块的动图保存在本地,同时,也将数据放入数据库中.
在完成了将数据放入到数据库的之后, 我想着可以直接通过调用数据库,将图片保存
(为什么有这个想法呢,因为我发现如果直接在主程序中存贮图片,它跑的太慢了,不如将数据都放到数据库中,之后专门调用数据库来贮存图片)
但是这里发现一个问题,数据中的内容挺多的,然后发现了好多内容是重复的,因此我们需要对数据库进行去重
关于数据去重的内容,其实我之前的文章已经写过了(写那篇文章的时候,这个爬虫已经完成了呢~)
主要思路是针对某一个元素的数量进行操作,pymongo里面有一个方法是可以统计指定元素的数量的,如果当前元素只有一个,就不管,不是一个元素,就删除
核心代码如下:
数据去重之后,再次进行图片的存储,就方便多了
之后图片删除了也不用重新跑一遍,核心代码如下:
01_get_gif_url.py
02_delete_repeat_url_in_mongodb.py
谢谢阅读!!!
育机构在做定制化软件开发的时候,会遇到这样一个问题:机构需要定制自己的错题本封面和封底,并且题目界面需要有各种便签可供学生标记,例如下面这个图:
要显示这样的错题界面,如果用word形式,一种办法是通过html转换成word,但是这样会导致部分理科题目无法显示的情况;另一个办法是直接在word中显示html,这种形式其实还是html,体验不太好,打印出来也会出问题。所以我们采取的是通过PDF的形式展示这种格式,并且还可以定制封面和封底:如下图:
因为PDF是比较好的打印格式,不会出现混乱的情况,所以目前就是怎么解决html完美转换成PDF的问题。
我们尝试了很多插件以后,最终发现下面这2个工具比较合适:wkhtmltopdf和phantomjs,下面分别试一下他们的效果:
本文希望通过自己的开发经验,减少教育软件开发者的坑。可以通过下面这个网站进行测试:http://www.widomk12.cn
一篇:node.js 15 如何操作Excel文件
几乎所有的项目涉及到报表或者合同处理等,都会跟PDF打交道。
node.js中,用的比较多的是html-pdf,每周下载量达到8万多,是比较多了。
html-pdf
这款工具的特点是不光可以通过代码调用API生成pdf,还提供命令行工具html-pdf来将html文件转换成pdf文件。
接下来,我们看一下html-pdf的安装使用。
npm install -g html-pdf
由于html-pdf是基于phantomjs的,所以在安装过程中会自动下载phantomjs。
html-pdf test/businesscard.html businesscard.pdf
直接运行html-pdf加上源html文件,后面加上pdf文件名就可以生成pdf文件。
//引入fs, html-pef模块
var fs=require('fs');
var pdf=require('html-pdf');
//读取html文件
var html=fs.readFileSync('./test/businesscard.html', 'utf8');
//参数options, 将PDF format设为letter, 如果是A4,直接将下面代码中的letter换成A4即可
var options={ format: 'Letter' };
//创建pdf文件
pdf.create(html, options).toFile('./businesscard.pdf', function(err, res) {
if (err) return console.log(err);
console.log(res); // { filename: '/app/businesscard.pdf' }
});
var pdf=require('html-pdf');
pdf.create(html).toFile([filepath, ]function(err, res){
console.log(res.filename);
});
pdf.create(html).toStream(function(err, stream){
stream.pipe(fs.createWriteStream('./foo.pdf'));
});
pdf.create(html).toBuffer(function(err, buffer){
console.log('This is a buffer:', Buffer.isBuffer(buffer));
});
html-pdf 可以将html中的header和footer读出。只要是id为pageHeader或者pageFooter的都可以被识别出来。
<div id="pageHeader">Default header</div>
<div id="pageHeader-first">Header on first page</div>
<div id="pageHeader-2">Header on second page</div>
<div id="pageHeader-3">Header on third page</div>
<div id="pageHeader-last">Header on last page</div>
...
<div id="pageFooter">Default footer</div>
<div id="pageFooter-first">Footer on first page</div>
<div id="pageFooter-2">Footer on second page</div>
<div id="pageFooter-last">Footer on last page</div>
在调用API pdf.create(html, options).toFile()创建PDF时,这里面的参数options相当强大,可以传很多数据。包括之前说的A4格式。
*请认真填写需求信息,我们会在24小时内与您取得联系。