Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
夜涼如水,蒼穹下,秋葉舞。
天橋下川流不息的斑斕車燈,人來(lái)人往的十字街角,喧囂與繁華的城。
我需要看看小姐姐的圖片,好好感受下這世界的溫柔以待。
私信小編007或者01即可獲取數(shù)十套PDF或者零基礎(chǔ)入門資料一套哦!
按照爬蟲(chóng)的基本規(guī)律:
1.找到目標(biāo)
2.抓取目標(biāo)
3.處理目標(biāo)內(nèi)容,獲取有用的信息
1.我們的目標(biāo)是: http://gifcc.com/forum.php
這個(gè)網(wǎng)站呢,是一個(gè)論壇式網(wǎng)站,里面分了幾大類,反正試試各種動(dòng)圖。
我們的目標(biāo)呢,就是找到這(收)些(藏)動(dòng)(到)圖(自)的(己)地(電)址(腦).
2.看看各個(gè)模塊的網(wǎng)址,有什么規(guī)律
對(duì),沒(méi)錯(cuò),如果以游客的身份進(jìn)行訪問(wèn),那么各個(gè)模塊的網(wǎng)址就是這樣的形式:http://gifcc.com/forum-XX-1.html
1.獲取入口頁(yè)面內(nèi)容
即根據(jù)傳入的URL,獲取整個(gè)頁(yè)面的源碼
這里我們使用了webdriver以及PhantomJS這些模塊,為什么呢?因?yàn)榫W(wǎng)頁(yè)是動(dòng)態(tài)加載的,這樣可以抓取的數(shù)據(jù)全一點(diǎn)。
2.獲取頁(yè)碼數(shù)
這里的頁(yè)碼處理用到了一個(gè)模板pq,采用PyQuery的方式查找我們需要的元素,感覺(jué)更好處理一點(diǎn),挺方便的
同時(shí)這里的處理稍微有點(diǎn)意思,如果觀察這個(gè)頁(yè)面的話,會(huì)發(fā)現(xiàn),每個(gè)模板的頁(yè)碼,在上面和下面都有一個(gè),然后
我這里截取的一下,因?yàn)槲覀冎恍枰粋€(gè)頁(yè)碼數(shù)字即可
3-6 第三步到第六步一起來(lái)說(shuō)
其實(shí)就是根據(jù)頁(yè)碼數(shù),來(lái)進(jìn)行遍歷,獲取到每一頁(yè)的內(nèi)容
然后得到每一頁(yè)中的所有圖片地址
在進(jìn)行獲取每一頁(yè)的內(nèi)容的時(shí)候,需要重新組裝頁(yè)面地址。
有了新的地址,就可以獲取當(dāng)前頁(yè)面的內(nèi)容,并進(jìn)行數(shù)據(jù)處理,得到每一張圖片的地址列表
在獲取到圖片列表后,再次解析,獲取每一張圖片的URL
將圖片存到本地,以及將數(shù)據(jù)寫入數(shù)據(jù)庫(kù)
到這里其實(shí)大體的內(nèi)容已經(jīng)完成了,我們能夠?qū)⑦@個(gè)論壇的各個(gè)模塊的動(dòng)圖保存在本地,同時(shí),也將數(shù)據(jù)放入數(shù)據(jù)庫(kù)中.
在完成了將數(shù)據(jù)放入到數(shù)據(jù)庫(kù)的之后, 我想著可以直接通過(guò)調(diào)用數(shù)據(jù)庫(kù),將圖片保存
(為什么有這個(gè)想法呢,因?yàn)槲野l(fā)現(xiàn)如果直接在主程序中存貯圖片,它跑的太慢了,不如將數(shù)據(jù)都放到數(shù)據(jù)庫(kù)中,之后專門調(diào)用數(shù)據(jù)庫(kù)來(lái)貯存圖片)
但是這里發(fā)現(xiàn)一個(gè)問(wèn)題,數(shù)據(jù)中的內(nèi)容挺多的,然后發(fā)現(xiàn)了好多內(nèi)容是重復(fù)的,因此我們需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行去重
關(guān)于數(shù)據(jù)去重的內(nèi)容,其實(shí)我之前的文章已經(jīng)寫過(guò)了(寫那篇文章的時(shí)候,這個(gè)爬蟲(chóng)已經(jīng)完成了呢~)
主要思路是針對(duì)某一個(gè)元素的數(shù)量進(jìn)行操作,pymongo里面有一個(gè)方法是可以統(tǒng)計(jì)指定元素的數(shù)量的,如果當(dāng)前元素只有一個(gè),就不管,不是一個(gè)元素,就刪除
核心代碼如下:
數(shù)據(jù)去重之后,再次進(jìn)行圖片的存儲(chǔ),就方便多了
之后圖片刪除了也不用重新跑一遍,核心代碼如下:
01_get_gif_url.py
02_delete_repeat_url_in_mongodb.py
謝謝閱讀!!!
育機(jī)構(gòu)在做定制化軟件開(kāi)發(fā)的時(shí)候,會(huì)遇到這樣一個(gè)問(wèn)題:機(jī)構(gòu)需要定制自己的錯(cuò)題本封面和封底,并且題目界面需要有各種便簽可供學(xué)生標(biāo)記,例如下面這個(gè)圖:
要顯示這樣的錯(cuò)題界面,如果用word形式,一種辦法是通過(guò)html轉(zhuǎn)換成word,但是這樣會(huì)導(dǎo)致部分理科題目無(wú)法顯示的情況;另一個(gè)辦法是直接在word中顯示html,這種形式其實(shí)還是html,體驗(yàn)不太好,打印出來(lái)也會(huì)出問(wèn)題。所以我們采取的是通過(guò)PDF的形式展示這種格式,并且還可以定制封面和封底:如下圖:
因?yàn)镻DF是比較好的打印格式,不會(huì)出現(xiàn)混亂的情況,所以目前就是怎么解決html完美轉(zhuǎn)換成PDF的問(wèn)題。
我們嘗試了很多插件以后,最終發(fā)現(xiàn)下面這2個(gè)工具比較合適:wkhtmltopdf和phantomjs,下面分別試一下他們的效果:
本文希望通過(guò)自己的開(kāi)發(fā)經(jīng)驗(yàn),減少教育軟件開(kāi)發(fā)者的坑。可以通過(guò)下面這個(gè)網(wǎng)站進(jìn)行測(cè)試:http://www.widomk12.cn
一篇:node.js 15 如何操作Excel文件
幾乎所有的項(xiàng)目涉及到報(bào)表或者合同處理等,都會(huì)跟PDF打交道。
node.js中,用的比較多的是html-pdf,每周下載量達(dá)到8萬(wàn)多,是比較多了。
html-pdf
這款工具的特點(diǎn)是不光可以通過(guò)代碼調(diào)用API生成pdf,還提供命令行工具h(yuǎn)tml-pdf來(lái)將html文件轉(zhuǎn)換成pdf文件。
接下來(lái),我們看一下html-pdf的安裝使用。
npm install -g html-pdf
由于html-pdf是基于phantomjs的,所以在安裝過(guò)程中會(huì)自動(dòng)下載phantomjs。
html-pdf test/businesscard.html businesscard.pdf
直接運(yùn)行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');
//參數(shù)options, 將PDF format設(shè)為letter, 如果是A4,直接將下面代碼中的letter換成A4即可
var options={ format: 'Letter' };
//創(chuàng)建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的都可以被識(shí)別出來(lái)。
<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>
在調(diào)用API pdf.create(html, options).toFile()創(chuàng)建PDF時(shí),這里面的參數(shù)options相當(dāng)強(qiáng)大,可以傳很多數(shù)據(jù)。包括之前說(shuō)的A4格式。
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。