夜涼如水,蒼穹下,秋葉舞。
天橋下川流不息的斑斕車燈,人來人往的十字街角,喧囂與繁華的城。
我需要看看小姐姐的圖片,好好感受下這世界的溫柔以待。
私信小編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小時內與您取得聯系。