亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python3操作Excel-以豆瓣圖書Top250為例

系統 1795 0

本文利用Python3爬蟲抓取豆瓣圖書Top250,并利用xlwt模塊將其存儲至excel文件,圖片下載到相應目錄。旨在進行更多的爬蟲實踐練習以及模塊學習。

工具

1.Python 3.5

2.BeautifulSoup、xlwt模塊

開始動手

首先查看目標網頁的url:?https://book.douban.com/top250?start=0, 然后我嘗試了在代碼里直接通過字符串連接僅改變”start=“后面的數字的方法來遍歷所有的250/25 = 10頁內容,但是后來發現不行,那樣的話出來的永遠是第一頁,于是通過瀏覽器的F12開發者工具檢查,發現start是要post上去的,如下圖:

所以建立一個postData的dict:

postData?=?{"start": i}?#i為0,25,...225

每次將其post上去即可解決返回都是第一頁的問題。

分析網頁可知,一本書的羅列信息以及要爬取的點如下圖:

從上到下需要爬取的信息有:

1. 圖書鏈接地址

2. 封面圖片鏈接 ?我到時候會將此鏈接打開,下載圖片到本地 (download_img函數)

3. 書名 ?要注意的是這里書名取title的內容而不去a標簽中的string信息,因為string信息可能包含諸如空格、換行符之類的字符,給處理造成麻煩,直接取title格式正確且無需額外處理。

4. 別名 ?這里主要是副標題或者是外文名,有的書沒有這項,那么我們就寫入一個“無”,千萬不可以寫入一個空串,否則的話會出現故障,我下面會提到。

5. 出版信息 ?如作者、譯者、出版社、出版年份、價格, 這也是重要信息之一,否則有多本書名字一致可能會無法分辨

6. 評分

7. 評價人數

除此之外,我還爬取一個“ 標簽 ”信息,它在圖書鏈接打開之后的網頁中,找到它的位置如下:

爬到標簽以后將它們用逗號連接起來作為標簽值。

好了,既然明確了要爬的指標,以及了解了網頁結構以及指標所在的html中的位置,那么就可以寫出如下代碼:

Python3操作Excel-以豆瓣圖書Top250為例_第1張圖片

通過xlwt模塊存入xls文件及其問題

爬取下來了以后當然要考慮存儲,這時我想試試把它存到Excel文件(.xls)中,于是搜得python操作excel可以使用xlwt,xlrd模塊,雖然他們暫時只支持到excel2003,但是足夠了。xlwt為Python生成.xls文件的模塊,而xlrd為讀取的。由于我想的是直接生成xls文件,不需用到xlrd,所以先安裝xlwt。

直接進入Python目錄使用如下命令即可安裝xlwt:

pip3 install xlwt

安裝完后寫出操作代碼,這里同時也寫入txt文件,方便比較:

Python3操作Excel-以豆瓣圖書Top250為例_第2張圖片

滿以為這樣就可以了,但是還是出現了一些錯誤。

比如曾經出現了寫著寫著就寫不下去了的情況(以下并非以上代碼產生的結果):

這時我把不是str的都改成str了,不該str的盡量用數字(int,float),然后又遇到了下面的情況:

寫到第64項又寫不下去了,但是那些int,float都寫完了,‘無’也是斷斷續續顯示幾個,我想,既然找不到問題,那么慢慢套吧。首先極大可能是中文編碼的問題,因為我把一些可以不為str類型的都賦成非str類型以后都正確地顯示了,而且上圖中的顯示在圖片路徑名那里斷了,所以我讓那一列都不顯示,居然,成功了!

如圖,除了不顯示的那一列,其它完全正常,可以斷定就是下面這里出現的錯誤:

writelist=[i+j,bookName,nickname,float(rating),int(nums),"I:\\douban\\image\\"+bookName+".jpg",bookurl,notion,tag]

我的圖片路徑那里是直接字符串拼接而成的,所以可能會有編碼的錯誤。那么稍微改一下試試:

imgpath?=?str("I:\\douban\\image\\"+bookName+".jpg");

writelist=[i+j,bookName,nickname,float(rating),int(nums),imgpath,bookurl,notion,tag]

好吧,還是不行,還是出現圖5的問題,但是打印在Python IDLE里面又都是正確的。

既然如此,把圖片鏈接全部改成一樣的英文試一下:

imgpath?=?str("I:\\douban\\image\\"+"a"+".jpg")

writelist=[i+j,bookName,nickname,float(rating),int(nums),imgpath,bookurl,notion,tag]

又是正確的:('無'已改為'None')

所以說,還是圖片路徑的問題,那我們索性將圖片路徑那列換成圖片鏈接,采取消極應對方法,反正這項是圖片鏈接還是圖片路徑無關緊要,反正圖片路徑里面有圖片就可以了。此外我還加了一個計時的代碼,計算總爬取時間,因為我覺得這樣干爬太慢了,沒有個將近10分鐘完不成,考慮利用多線程去爬,這里先記錄一下時間以觀后效。然后發現還是不行!現在成了只要imageurl固定(中文也行),就能夠順利輸出到xls中,否則就不行。很詭異。于是我又嘗試了縮短imageurl,實驗得知,當取imageurl[:-6]時是可以的,但imageurl[:-5]就不行了。后面又干脆不寫入imageurl這一列,可以,不寫入別名或者不寫入圖書鏈接都是正常的,但是不寫入標號就不行。至今仍不得解。初步猜測莫非是寫入的字符數受限制了?還得靠更多的實驗才能確定。而且也說不定就是Windows下的編碼問題,這又得靠在Linux下進行實驗判斷。所以要做的事情還很多,這里先把正確的絕大部分工作做了再說。

于是干脆不要圖書地址一列,最后得出如下最終代碼:

Python3操作Excel-以豆瓣圖書Top250為例_第3張圖片

運行(7分多鐘):

還是斷了,那就真不知道怎么辦才好了。再改變方法,先寫到TXT文本文件再導入到xls中,就先不管本文標題了。

運行:

在.txt中是正確的:

然后在xls文件中選擇數據->導入數據即可得到最終結果:

封面圖片:


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 九九视频九九热 | 老子影院午夜伦不卡手机 | 亚洲人成伊人成综合网久久久 | 欧美黑大粗硬毛片视频 | 欧美综合一区二区三区 | 亚洲福利一区福利三区 | 天天操综合视频 | 自拍 欧美 在线 综合 另类 | 免费骚视频| 在线观看免费黄色小视频 | 亚洲欧美一区二区三区不卡 | 日本强不卡在线观看 | 欧美另类色 | 久久久国产精品网站 | 国产激情对白一区二区三区四 | 日韩欧美国产高清 | swag系列国产精品 | 亚洲免费观看视频 | 久久久精品日本一区二区三区 | 久爱www成人网免费视频 | 欧美成人三级一区二区在线观看 | 欧美一级毛片免费观看视频 | 四虎国产永久在线精品免费观看 | 99在线观看视频免费精品9 | 91精品国产露脸在线 | 国产女人综合久久精品视 | 爱爱的免费视频 | 国产一级持黄大片99久久 | 毛片天天看 | 成人在线观看国产 | 久久er热在这里只有精品85 | 99热在这里只有免费精品 | 四虎视频国产精品免费入口 | 97人人在线 | 久久五月天婷婷 | 国产伦精品一区二区三区免 | 日韩专区亚洲精品欧美专区 | 干成人| 欧美日本俄罗斯一级毛片 | 欧美激情一区二区 | 免费一级欧美片片线观看 |