整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          手把手教你使用scrapy框架來爬取北京新發(fā)地價(jià)格行

          手把手教你使用scrapy框架來爬取北京新發(fā)地價(jià)格行情(實(shí)戰(zhàn)篇)

          源:Python爬蟲與數(shù)據(jù)挖掘

          作者:霖hero

          前言

          關(guān)于Scrapy理論的知識,可以參考我的上一篇文章,這里不再贅述,直接上干貨。

          實(shí)戰(zhàn)演練

          爬取分析

          首先我們進(jìn)入北京新發(fā)地價(jià)格行情網(wǎng)頁并打開開發(fā)者工具,如下圖所示:

          經(jīng)過簡單的查找,發(fā)現(xiàn)每個(gè)getPriceData.html存放著價(jià)格行情的數(shù)據(jù),由此可得,我們可以通過getPriceData.html來進(jìn)行數(shù)據(jù)的獲取。

          觀察Headers請求,如下圖所示:

          發(fā)現(xiàn)它是POST請求,請求URL鏈接是http://www.xinfadi.com.cn/getPriceData.html,current是翻頁的重要參數(shù),limit是每頁有多少行數(shù)據(jù),我們可以構(gòu)造消息體,代碼如下所示:

          data={
          'limit': '20',
          'current':page
          }

          通過scrapy.Request()方法將消息體傳入到參數(shù)里面。

          或者我們可以根據(jù)測試和觀察規(guī)律,自己構(gòu)造URL鏈接,通過觀察分析,請求的URL鏈接可以為:

          http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=1
          http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=2
          http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t=3

          創(chuàng)建Spider爬蟲

          分析北京新發(fā)地價(jià)格行情后,接下來我們首先創(chuàng)建一個(gè)Scrapy項(xiàng)目,使用如下命令:

          scrapy startproject Vegetables

          這樣我們就成功創(chuàng)建了一個(gè)Scrapy項(xiàng)目,項(xiàng)目文件如下所示:

          接下來創(chuàng)建spider爬蟲,使用如下命令:

          scrapy genspider vegetables www.xinfadi.com.cn

          創(chuàng)建后vegetables.py內(nèi)容如下所示:

          import scrapy
          
          
          class VegetablesSpider(scrapy.Spider):
             name='vegetables'
             allowed_domains=['www.xinfadi.com.cn']
             start_urls=['https://www.xinfadi.com.cn']
             
             def parse(self, response):
                 pass

          提取數(shù)據(jù)

          在提取數(shù)據(jù)前,我們首先把要爬取的數(shù)據(jù)字段在items.py文件中定義好,代碼如下所示:

          import scrapy
          
          
          class VegetablesItem(scrapy.Item):
             # define the fields for your item here like:
             productName=scrapy.Field()
             lowPrice=scrapy.Field()
             highPrice=scrapy.Field()

          這里我們定義了三個(gè)字段分別是productName、lowPrice、highPrice

          定義好字段后,接下來將在創(chuàng)建的vegetables.py文件中進(jìn)行數(shù)據(jù)的提取,具體代碼如下

          import scrapy
          from Vegetables.items import VegetablesItem
          
          
          class VegetablesSpider(scrapy.Spider):
             name='vegetables'
             allowed_domains=['www.xinfadi.com.cn']
             def start_requests(self):
                 for i in range(1, 3):
                     url=f'http://www.xinfadi.com.cn/getPriceData.html?limit=20¤t={i}'
                     yield scrapy.Request(url=url, callback=self.parse)
          
          
             def parse(self, response):
                 html=response.json()
                 fooddata=html.get('list')
                 for i in fooddata:
                     item=VegetablesItem()
                     item['highPrice']=i.get('highPrice'),
                     item['lowPrice']=i.get('lowPrice'),
                     item['prodName']=i.get('prodName'),
                     yield item

          首先我們導(dǎo)入vegetablesitem,使用start_requests函數(shù)實(shí)現(xiàn)翻頁,大家可以使用剛才我們所講的方法實(shí)現(xiàn)翻頁,實(shí)現(xiàn)翻頁后,我們通過編寫parse()方法實(shí)現(xiàn)數(shù)據(jù)的獲取,首先我們把引擎響應(yīng)的數(shù)據(jù)以json()格式存放在html里面,調(diào)用get()方法來提取我們想要的數(shù)據(jù),最后通過yield生成器返回給引擎。

          最后我們在settings.py設(shè)置引擎的啟動,代碼如下所示:

          ITEM_PIPELINES={
            'Vegetables.pipelines.VegetablesPipeline': 300,
          }

          在這里我們就不保存數(shù)據(jù)在MongoDB數(shù)據(jù)庫里面了,我們直接啟動Spider爬蟲并把數(shù)據(jù)以csv格式輸出,使用如下命令:

          scrapy crawl vegetables -o 11.c

          運(yùn)行結(jié)果如下:

          好了,Scrapy框架爬取北京新發(fā)地就講解到這里了,感謝觀看!!!

          總結(jié)

          大家好,我是霖hero。這篇文章基于上篇理論文章,主要給大家分享了Scrapy爬蟲框架的實(shí)戰(zhàn)內(nèi)容,Scrapy是一個(gè)基于Twisted的異步處理框架,是純Python實(shí)現(xiàn)的爬蟲框架,是提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架,其架構(gòu)清晰,模塊之間的耦合程度低,可擴(kuò)展性極強(qiáng)。

          輕快、可直接播放的 GIF 小動畫很適合嵌入圖文。

          但是很多圖文編輯器復(fù)制粘貼 GIF 圖像都會出現(xiàn)問題。例如粘貼GIF 變成一幀靜態(tài)圖像,或提示無效圖像,或粘貼正常但發(fā)布上傳時(shí)報(bào)錯(cuò) …… 然后我們只能挨個(gè) GIF 都重復(fù)一遍:錄屏 > 壓縮 > 保存 > 添加圖像 > 上傳 > 插入文章 ……

          使用極簡錄屏軟件 Gif123 可以大幅簡化上面的操作:Gif123 可以一鍵錄屏,一鍵復(fù)制動畫,在圖文編輯器里 Ctrl +V 一下粘貼動畫就可以解決所有問題。Gif123 復(fù)制的 GIF 格式擁有良好的兼容性,不會動畫變靜態(tài)圖像,不會提示無效圖像,上傳時(shí)不會報(bào)錯(cuò)。

          Gif123 簡介

          Gif123 是一個(gè)開源軟件,體積很小只有 755KB,獨(dú)立 EXE 無任何外部依賴,兼容 Windows XP,Vista,Win7,Win8,Win10,Win11 …… 等所有流行桌面操作系統(tǒng)。

          軟件極簡單,只有 3 個(gè)主要按鈕:錄制、預(yù)覽、復(fù)制。

          Gif123 主窗口就是錄屏選框,可拖動選框選擇要錄制的區(qū)域。相比很多更復(fù)雜更強(qiáng)大的 GIF 錄制工具,Gif123 的操作非常簡單,一看就會。

          Gif123 雖然很小,但是在 GIF 有限的顏色限制下仍然可以顯著提升畫質(zhì)。錄制完成以后可自動調(diào)用強(qiáng)悍的 Gifsicle 壓縮 GIF 文件體積。并且在高分屏下可自動壓縮 GIF 至正常分辨率 —— 以避免瀏覽圖像時(shí)重復(fù)放大。

          Gif123 可錄制合成鼠標(biāo)軌跡,可調(diào)整鼠標(biāo)指針大小,可在設(shè)置中打開鼠標(biāo)指針高亮光圈功能,高亮光圈可跟隨鼠標(biāo)移動以指示鼠標(biāo)位置,單擊鼠標(biāo)時(shí)會顯示動畫光圈( 光圈顏色透明度為0 時(shí)僅顯示單擊動畫 ):

          按左鍵光圈就會向左側(cè)壓縮成半圓,按右鍵光圈就會向右側(cè)壓縮成半圓,按中鍵就會向內(nèi)側(cè)縮小為小圓。很多錄屏軟件僅用顏色區(qū)分左右按鍵 —— 說實(shí)話這可能只有錄屏的人明白,看動畫的人估計(jì)分不清。

          Gif123 最小化時(shí)按錄屏熱鍵可顯示快速選框:

          切換到預(yù)覽模式且暫停后可編輯動畫幀,在預(yù)覽動畫上點(diǎn)右鍵可彈出菜單,可以暫停動畫幀( 在圖像上按回車可以快速「暫停 / 繼續(xù)」播放動畫 ),動畫暫停狀態(tài)下可以使用鼠標(biāo)滾輪、幀滑塊控件、Page Up/Down ……等手動翻頁,暫停狀態(tài)可以方便地抽幀刪幀。

          預(yù)覽模式可在上圖界面底部的輸入框中重新設(shè)置優(yōu)化參數(shù)。在參數(shù)輸入框中點(diǎn)任何一個(gè)參數(shù)的任何位置,按鼠標(biāo)滾輪可以快速調(diào)整數(shù)值,如下圖:

          可實(shí)時(shí)預(yù)覽優(yōu)化效果與優(yōu)化后的文件體積。重新優(yōu)化總是基于原始圖像 —— 上次優(yōu)化設(shè)定不會影響當(dāng)前優(yōu)化效果。

          我為什么要開發(fā) Gif123

          Gif123 是我使用 aardio 開發(fā)的。至于 aardio 也是我開發(fā)的編程語言。關(guān)于 aardio 請參考文章:2022年,開發(fā)獨(dú)立 EXE 桌面應(yīng)用程序,用什么語言、技術(shù)合適

          GIF 還是非常有用的,很多時(shí)候我們需要這種小、簡單、不復(fù)雜又夠用的東西。GIF 錄屏的工具雖然很多,但是用著用著有時(shí)候就發(fā)現(xiàn)不需要的功能很多,需要的功能它又沒有或者不方便,所以我決定自己用 aardio 寫一個(gè),實(shí)際上要不了幾句代碼。

          開發(fā)經(jīng)驗(yàn)分享:揭開剪貼板的秘密

          GIF 錄制好了,我們一般當(dāng)然是復(fù)制并分享了,如果我們打開圖像再去復(fù)制還是有些麻煩,能一鍵復(fù)制多好。但是這個(gè)看起來簡單的事 —— 還真是有些麻煩,首先系統(tǒng)剪貼板其實(shí)并不支持 GIF 圖像,所以很多軟件里復(fù)制 GIF 只復(fù)制了第一幀。

          但是我們發(fā)現(xiàn) IE 是可以復(fù)制GIF的,有的文章說通過復(fù)制HTML就可以了,用 aardio 來寫實(shí)際上就是這樣:

          import win.clip.html;
          var html=win.clip.html();
          html.write(`<img src="c:\test.gif" />`)

          網(wǎng)上很多文章都這么寫,但實(shí)際上根據(jù)我的測試,這樣復(fù)制 GIF 以后瀏覽器或者其他一些軟件里并不能粘貼。

          這個(gè)其實(shí)可以理解,瀏覽器是沒有權(quán)限訪問本地文件的,即使他得到了剪貼板中的HTML,也沒有權(quán)限去讀任意位置的本地文件,考慮到了這一點(diǎn),我決定把本地圖像轉(zhuǎn)換為 Data URL 直接嵌入HTML,主要代碼如下:

          import win.clip.html;
          import crypt;
          
          var html=win.clip.html();
          var dataUrl=string.format('data:image/gif;base64,%s'
            ,crypt.encodeBin( string.loadBuffer(filePah),,0x40000001/*_CRYPT_STRING_BASE64*/) ); 
            
          html.write(`<img src="`+ dataUrl+`" />`,,false);

          上面的代碼實(shí)現(xiàn)了以后,我在瀏覽器圖文編輯器里測試了一下,用這種方法復(fù)制一個(gè) GIF 文件以后,再到編輯器里 Ctrl + V 粘貼,看到了 GIF 動畫在編輯器里顯示出來了,還沒高興零點(diǎn)幾秒,彈出一個(gè)錯(cuò)誤信息:粘貼圖像失敗。看了一下是遠(yuǎn)程錯(cuò)誤,猜測他把這個(gè)當(dāng)作普通遠(yuǎn)程圖像地址去處理了。

          然后在其他聊天軟件里試著粘貼了一下,也沒任何反應(yīng)。看來此路不通。看到有人說可以復(fù)制為 CF_HDROP 格式,好吧,aardio 干這事倒也方便,代碼如下:

          import win.clip.file;
          win.clip.file.write( filePath );

          其實(shí)這等價(jià)于在資源管理器里右鍵復(fù)制文件。用上面的方法復(fù)制了圖像以后,到聊天軟件里粘貼試了一下,粘貼出來的是一個(gè)文件圖標(biāo),并沒有認(rèn)出是 GIF 動畫。

          想起之前看到有人說:

          IE 能復(fù)制 GIF,但是在剪貼板里看到的只是靜態(tài)的 BMP 圖像,不知道 IE 是如何實(shí)現(xiàn)的,

          難道 ……

          于是試著在剪貼板里先復(fù)制 GIF 第一幀的靜態(tài)圖像,再復(fù)制文件本身(同時(shí)復(fù)制2種格式),用這種方法復(fù)制了一個(gè) GIF 圖像,然后到 聊天工具里粘貼,這回粘貼出來的還真是 GIF 動畫 ,直接就顯示預(yù)覽動畫了 —— 完美!

          然后打開瀏覽器編輯器,試著粘貼了一下,遇到2種不同的反應(yīng),第1種是出現(xiàn)了靜態(tài)圖像 —— 沒動畫,第2種是靜態(tài)圖像也沒有,細(xì)節(jié)沒有深究。想起之前復(fù)制 Data URL 失敗的過程,這難道是 …… 于是趕緊換第 3 種方法,復(fù)制第一幀靜態(tài)圖像,復(fù)制文件,然后再復(fù)制 Data URL ,一氣呵成三連擊以后終于成功了,瀏覽器編輯器里完美粘貼出來 GIF 動畫,試了很多軟件以及圖文編輯器也都能完美支持。

          于是,我又加了一個(gè)庫 win.clip.gif,用起來就太簡單了:

          import win.clip.gif;
          win.clip.gif.write( filePath );

          您看這就是 aardio 的好處了,像這種庫一天能寫一打出來,再復(fù)雜的代碼都可以簡化,這得益于 aardio 良好的模塊化支持。

          4年的時(shí)候小編還是個(gè)苦逼青年(說的好像現(xiàn)在不苦逼一樣)閑來無事,想做一本屬于自己的電子書,最開始的時(shí)候,我想的是利用html進(jìn)行網(wǎng)頁文檔的制作,結(jié)果發(fā)現(xiàn)自己毫無網(wǎng)頁基礎(chǔ),實(shí)在是舉步維艱,畢竟小編是個(gè)24k純理工男,學(xué)的還是化學(xué)專業(yè)。

          不過不要緊,在我的孜孜不倦和勇于探索的精神下,終于找到一款簡單易學(xué),零網(wǎng)頁基礎(chǔ),零電腦基礎(chǔ),零排版基礎(chǔ),零智商基礎(chǔ)的翻頁電子書制作軟件:iebook (讓大家賤笑了)

          在那個(gè)苦逼的買不起電腦的年代,小編天天泡在網(wǎng)吧,旁邊是各種小學(xué)生風(fēng)騷犀利的lol操作讓我自愧不如,經(jīng)過一個(gè)星期的鉆研(只怪中途網(wǎng)吧斷電,文檔無情的沒有備份,那感覺讓人絕望)終于做出了人生自己的第一本電子書——《后青春期的詩》效果大概是這樣的:

          iebook的功能是能實(shí)現(xiàn)翻頁,背景音樂,點(diǎn)擊跳轉(zhuǎn),自動滾動等,如果你想做散文詩歌或者故事類的文章,不失為一個(gè)不錯(cuò)的選擇。

          最終效果一般是以exe格式存在,也可以在線發(fā)表,看起來是不是很高大上?

          說到技術(shù)含量嘛,前面也說過,不難,只要具備基本的審美觀和核心內(nèi)容,加上模板的插入,音樂的插入,制作出一本exe文檔的電子書簡直易如反掌,就像走在路上隨隨便便就能撿張毛爺爺一樣,就是這么easy。對電子書感興趣的朋友可以關(guān)注小編公眾號fish1923 回復(fù)“軟件”獲取iebook,或者回復(fù)“電子書”查看本人制作的電子書,歡迎探討學(xué)習(xí)。

          不過正所謂“師傅領(lǐng)進(jìn)門,修行靠個(gè)人”任何軟件的應(yīng)用本質(zhì)上是很簡單的,例如ps,例如cad,但是要想做到極致卻需要付出很大的努力。就iebook這個(gè)軟件來說,我隨便講幾個(gè)關(guān)鍵點(diǎn),也許會對你的制作方面有些幫助,讓你少走一些彎路。

          1. 插入幀。

            就以標(biāo)準(zhǔn)組件來說,一般會有卷首頁,封面,版頁,封底。我們主要是插入版頁如圖所示:

          點(diǎn)擊添加頁面就會右方菜單欄出現(xiàn)多個(gè)幀,每一幀就是我們說的“每一頁”,所謂幀,通俗點(diǎn)說就是一個(gè)單位,可以理解為ps里的每一個(gè)圖層,每一幀都是靜止的圖象。你只需要在每一個(gè)幀上編輯即可。

          然后插入文字,模板,都是可以手動拖拽的,復(fù)制、放大、縮小、旋轉(zhuǎn)等等操作,都灰常方便。

          2.關(guān)于模板的下載

          在添加完幀之后,接下來就是模板的下載了

          如圖所示,不管是組合模板,還是頁面背景,圖文,文字模板,裝飾,特效。點(diǎn)擊下方的模板下載,都是會跳轉(zhuǎn)到iebook官方網(wǎng)站下載的,比較精美的當(dāng)然是需要付費(fèi)下載的(這個(gè)世界沒有免費(fèi)的午餐)。

          3.關(guān)于屬性欄的設(shè)置。

          這就不多說了吧,零智商操作,音樂可以從電腦端導(dǎo)入,我就不廢話了。

          4.生成的電子雜志去哪里了?

          1. 正在編譯(生成)EXE電子雜志;

          2. 電子雜志編譯(生成)完畢;單擊打開文件夾按鈕,打開電子雜志所在路徑,您可以將生成好的電子雜志發(fā)給好友分享;己經(jīng)編譯完畢的電子雜志,預(yù)覽整體效果。

          這樣,一篇精美的翻頁電子書就生成了,是不是一下子就由一個(gè)屌絲青年變身成為文藝小青年了,總的來說,這款軟件還是十分簡單好用的。

          其實(shí),誰又天生優(yōu)秀呢?優(yōu)秀來源于對簡單事情的重復(fù)操作和追求極致的精神。歡迎關(guān)注小編公眾號fish1923 探討學(xué)習(xí)!


          主站蜘蛛池模板: 精品无码人妻一区二区三区不卡 | 亚洲综合无码一区二区| 国产日韩综合一区二区性色AV| 国产一区二区三区在线免费观看 | 精品一区二区三区AV天堂| 精品国产一区二区三区四区| 国产精品区AV一区二区| 国产成人一区二区三区电影网站| 亚洲一区二区三区偷拍女厕| 国产一区二区三区美女| 日韩在线观看一区二区三区| 伊人激情AV一区二区三区| 亚洲欧美日韩中文字幕在线一区| 人妻少妇一区二区三区| 国产精品盗摄一区二区在线| 国产精品一区视频| 中文乱码字幕高清一区二区| 国产精品香蕉一区二区三区| 亚洲一区二区在线免费观看| 国产一区二区三区久久| 日韩精品无码一区二区视频 | 亚洲制服丝袜一区二区三区| 成人一区二区免费视频| 视频一区二区精品的福利| 日韩少妇无码一区二区三区| 日韩A无码AV一区二区三区 | 麻豆精品一区二区综合av| 在线观看国产一区亚洲bd| 精品国产一区二区三区免费看| 老熟妇高潮一区二区三区| 国产微拍精品一区二区| 制服美女视频一区| 国产精品一区二区三区99| 一区二区三区人妻无码| 国产成人一区二区三区视频免费| 黑人大战亚洲人精品一区| 老熟女五十路乱子交尾中出一区| 极品尤物一区二区三区| 日韩精品一区在线| 国精品无码A区一区二区| 一区二区视频在线播放|