源:Python爬蟲與數(shù)據(jù)挖掘
作者:霖hero
關(guān)于Scrapy理論的知識,可以參考我的上一篇文章,這里不再贅述,直接上干貨。
首先我們進(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
分析北京新發(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ù)字段在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ā)地就講解到這里了,感謝觀看!!!
大家好,我是霖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 是一個(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)化效果。
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í)際上要不了幾句代碼。
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),也許會對你的制作方面有些幫助,讓你少走一些彎路。
插入幀。
就以標(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.生成的電子雜志去哪里了?
正在編譯(生成)EXE電子雜志;
電子雜志編譯(生成)完畢;單擊打開文件夾按鈕,打開電子雜志所在路徑,您可以將生成好的電子雜志發(fā)給好友分享;己經(jīng)編譯完畢的電子雜志,預(yù)覽整體效果。
這樣,一篇精美的翻頁電子書就生成了,是不是一下子就由一個(gè)屌絲青年變身成為文藝小青年了,總的來說,這款軟件還是十分簡單好用的。
其實(shí),誰又天生優(yōu)秀呢?優(yōu)秀來源于對簡單事情的重復(fù)操作和追求極致的精神。歡迎關(guān)注小編公眾號fish1923 探討學(xué)習(xí)!
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。