2020年5月21號, 和往常一樣底燎,都只是普通的一天蠢络,但是今天碰到了一個事情:很多時候我們寫完爬蟲,都是為了抓取數(shù)據(jù)給到別人,但是如果這個數(shù)據(jù)是需要實時更新的无切,那怎么辦? 豈不是自己天天抓取完荡短,再把數(shù)據(jù)給到他人。這樣子其實很麻煩订雾。于是肢预,我就開始著手如何把python項目打包成exe文件。
于是我就上了pyinstaller, 按照網(wǎng)上的教程把scrapy工程導(dǎo)出成exe, 但是導(dǎo)出完成之后, 發(fā)現(xiàn)在我的電腦上運行是OK的洼哎,但是其他人的電腦上不行烫映。然后作為小白的自己不知道該何去何從,scrapy是我自己用的最順手的爬蟲工具噩峦《Ч担可是涉及到的文件確實很多,打包的話也容易出問題识补。
打包完成之后的部分文件族淮,文件還是比較多的。
其他人的電腦運行結(jié)果:
自己暫時沒有想到如何去修改凭涂,于是就想著如果不是用scrapy寫程序呢祝辣?打包的話是不是比較簡單。于是自己沒有用scrapy切油,用的是python自帶的requests重寫了爬蟲的代碼.
由于自己之前一直用的scrapy, 習(xí)慣了那個框架蝙斜,現(xiàn)在出來之后開始寫,還是挺不習(xí)慣的澎胡。最難的部分是以前自己一直在scrapy中一直用XPATH來解析response中的內(nèi)容并提取孕荠,可以說是非常熟練,現(xiàn)在突然換回來攻谁,一下子不知道該如何處理稚伍。
于是自己就去網(wǎng)上看了別人的方法,發(fā)現(xiàn)其實也是可以用xpath的戚宦,這個模塊叫做lxml个曙。
在scrapy里面, xpath的使用方法是
value = response.xpath("http://表達(dá)式").extract()
不使用scrapy的時候, 其實是分成了兩步:
1)獲取網(wǎng)頁的源代碼, 處理成節(jié)點, 也就是 r = etree.HTML(response.text)
2)第二步是對處理后的r使用xpath,方法是value = r.xpath("http://表達(dá)式")
是沒有extract()這個方法的.
依靠著lxml阁苞,延續(xù)了自己使用xpath快速查找內(nèi)容的方法困檩。最終完成了爬蟲的編寫。并且在最后打包成exe的時候那槽,只生成了一個文件悼沿,同時可以在其他人的電腦上順利運行。
由于過去的一年多骚灸,自己頻繁使用了scrapy糟趾,現(xiàn)在上手request和response覺得難度不大,很多地方都是相似的。scrapy是一個高級版本义郑,框架完善蝶柿。但是基本的requests卻給了我更多的靈活性。以前使用scrapy, 要編寫setting, item, 爬蟲文件等等. 現(xiàn)在只需要一個py文件就可以完成了. 相信之后自己會使用requests和selenium來完成自己更多的爬蟲項目.
selenium: 優(yōu)勢在于爬蟲過程中如果需要登錄驗證的話非驮,scrapy和requests往往步驟繁多交汤,驗證起來很困難。selenium就是操作瀏覽器劫笙,沒有這方面的顧慮芙扎,特別是一些網(wǎng)站反爬蟲特別厲害的,使用selenium雖然效率低填大,但是能解決大部分驗證和反爬蟲的問題戒洼。
Scrapy:完善的爬蟲框架,適合新手使用允华,框架已經(jīng)弄好圈浇。按照這個框架填寫自己想要的內(nèi)容,可以在前期讓自己專注于代碼的編寫和糾錯靴寂。性能也很強大磷蜀,效率高,一直很喜歡它百炬。適合大的項目蠕搜。
requests:適合小項目,靈活性高收壕。
目前,本人是三者都使用轨蛤,根據(jù)不同的目標(biāo)選擇不同的方案蜜宪。