整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          網上動態圖有多污?一看嚇一跳!Python爬取上萬條

          網上動態圖有多污?一看嚇一跳!Python爬取上萬條動態圖!

          在前面的話

          夜涼如水,蒼穹下,秋葉舞。

          天橋下川流不息的斑斕車燈,人來人往的十字街角,喧囂與繁華的城。

          我需要看看小姐姐的圖片,好好感受下這世界的溫柔以待。

          私信小編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,下面分別試一下他們的效果:


          • wkhtmltopdf:下載完成后需要添加到環境變量才能在代碼中使用,比如我們使用的是PHP,就可以通過shell_exec執行命令行。通過官網我們知道wkhtmltopdf還是非常強大的,可以設置頁面為A3或者A4格式,可以設置頁眉頁腳,也可以設置字間距,字體,邊框等,能滿足大部分的轉換需求,但是wkhtmltopdf也有他的缺點,就是對于js渲染后的頁面轉換后顯示不太友好。對于我們的需求而言,要解決的難點就是理科公式的問題,因為我們的latex公式基本都是js渲染后才顯示。后來發現wkhtmltopdf有一個參數就是可以設置等待時間,最終我們設置等待5秒在導出,就解決了latex導出PDF的問題,并且實現了完美的打印


          • phantomjs:使用方法都差不多,只是phantomjs需要通過js來配置參數。一樣的需要先添加phantomjs到環境變量,然后通過代碼執行命令行實現,也可以設置加載時間來實現js對html的渲染,只是phantomjs沒有wkhtmltopdf轉換專業。


          本文希望通過自己的開發經驗,減少教育軟件開發者的坑。可以通過下面這個網站進行測試:http://www.widomk12.cn

          一篇:node.js 15 如何操作Excel文件

          幾乎所有的項目涉及到報表或者合同處理等,都會跟PDF打交道。


          pdf

          node.js中,用的比較多的是html-pdf,每周下載量達到8萬多,是比較多了。


          html-pdf

          這款工具的特點是不光可以通過代碼調用API生成pdf,還提供命令行工具html-pdf來將html文件轉換成pdf文件。

          接下來,我們看一下html-pdf的安裝使用。

          html-pdf 安裝

           npm install -g html-pdf

          由于html-pdf是基于phantomjs的,所以在安裝過程中會自動下載phantomjs。

          html-pdf命令行

          html-pdf test/businesscard.html businesscard.pdf

          直接運行html-pdf加上源html文件,后面加上pdf文件名就可以生成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' }
          });

          相關API

          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中的header 和footer可以直接讀出

          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>

          關于參數options

          在調用API pdf.create(html, options).toFile()創建PDF時,這里面的參數options相當強大,可以傳很多數據。包括之前說的A4格式。


          主站蜘蛛池模板: 日本一区二区三区不卡视频中文字幕| 一区视频免费观看| 中文无码一区二区不卡αv| 日韩精品一区二区三区毛片 | 精品一区二区视频在线观看| 国产一区二区三区久久精品| 亚洲福利视频一区二区三区 | 无码人妻精品一区二区三区66 | 久久精品无码一区二区三区不卡| 中文字幕一区二区精品区| 午夜视频一区二区| 中文字幕在线观看一区二区 | 亚洲中文字幕无码一区二区三区| 国产精品亚洲午夜一区二区三区| 中文字幕精品一区二区三区视频| 无码av中文一区二区三区桃花岛| 无码午夜人妻一区二区三区不卡视频| 亚洲国产精品无码第一区二区三区| 日本一区二区在线| 国产综合无码一区二区三区| 国产一区二区三区露脸| 午夜视频在线观看一区| 亚洲性日韩精品一区二区三区| 秋霞鲁丝片一区二区三区| 日韩精品一区二区三区国语自制 | 亚洲av综合av一区| 亚洲无线码在线一区观看| 中文字幕一区二区免费| 国产一区二区三区免费观看在线 | 国产香蕉一区二区在线网站| 亚洲制服中文字幕第一区| 亚洲制服丝袜一区二区三区| 亚洲高清毛片一区二区| 少妇激情av一区二区| 国产一区二区三区国产精品| 精品理论片一区二区三区| 中文字幕一区二区人妻| 精品乱码一区二区三区四区| 亚洲愉拍一区二区三区| 一区二区三区四区精品| 亚洲一区二区免费视频|