Python簡單爬蟲入門三,python爬蟲
我們繼續研究BeautifulSoup分類列印輸出Python簡單爬蟲入門一Python簡單爬蟲入門二
前兩部主要講述我們如何用BeautifulSoup怎去抓取網頁資訊以及擷取相應的圖片標題等資訊,
等於我們已經只知道如何用工具去瀏覽和檢索內容,但是實現只有你知道抓取的是什麼,這時候
我們需要整理分類,給他們命名以及分類這樣列印出來別人一看就知道標題是什麼,內容是什麼
#!usr/bin/env python# -*- coding:utf-8 -*-from bs4 import BeautifulSoupimport requestsimport jsonheaders ={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36', # 'Cookie':'CNZZDATA1260535040=242528197-1478672438-null%7C1478672438',}url= 'http://www.beiwo.tv/index.php?s=vod-search-id-14-tid--area--year-$search_year-order-gold.html'wb_data = requests.get(url,headers=headers)soup = BeautifulSoup(wb_data.text,'lxml')imgs = soup.select(" ul.img-list.clearfix > li > a > img ")titles = soup.select(" ul.img-list.clearfix > li > h5 ")yanyuans = soup.select(" ul.img-list.clearfix > li > p")stars = soup.select(" p.star > em")J_data = {}count = 0for title,img,yanyuan,star in zip(titles,imgs,yanyuans,stars): data = { "title":title.get_text(), "img":img.get("src"), "演員":list(yanyuan.stripped_strings), "評分":star.get_text(), } J_data[count] = data count += 1 print(data)with open("test.txt",'w') as f: f.write(json.dumps(J_data))
我就直接把完整代碼發出來一點點來說:
首先還是標準格式匯入相應方法這裡我多加了json用來儲存抓去的資料,就用來放入txt檔案內
headers偽裝瀏覽器標頭檔簡寫方式,url是你抓去網頁的地址(現在很多網站都有反爬保護越來越難爬取資訊)
requests請求網頁服務返回的資料wb_data給BeautifulSoup去解析用lxml格式
抓去的資訊如下titles標題imgs圖片yanyuans演員stars評分都加了s是因為返回的是抓去的每項全部相關資訊以列表返回
J_data字典後面儲存時的格式,count用來計數順便用來當字典的Key索引值,zip的方法我簡單介紹如下:
可以把兩個列表同一位置的值一一對應以元組返回行成新列表的方法在這裡我是用他來分類輸出我們抓去相應資訊
最後用了常用的寫入方法with可以不用寫檔案close關閉,處理完它會收拾後面操作,來看效果如下:
這裡我們整理所有想要的資料及分類,這樣列印出來相信給其它人看也知道是什麼,由於評分與演員放在一個標籤下所以沒有演員名時會有點BUG
在來看看txt文檔內儲存了什麼如下:
很多人說報錯亂碼什麼的,其實\u6f14就是中文只是用unicode的編碼的格式寫入文本如果你在反向讀取還是可以正常列印出來的(由於檔案太長沒法截取)
我們就在建立一個py檔案簡單教一下如何讀取檔案內容代碼如下:
#!/usr/bin/env python# -*- coding:utf-8 -*-import jsonwith open('test.txt','r') as f: dic = json.loads(f.readline()) for i in range(len(dic)): print(dic[str(i)])
匯入json的方法模組
開啟檔案test.txt模式r讀取並且命名f (上面產生的test.txt目錄是目前的目錄,也就是3個檔案是放在一起的,如果要寫在其它地方請寫相對路徑)
由於只有一行所以f.readline()讀取剛才大家看到unicode編碼的檔案以json.load的方式讀取,你是以json.dumps寫入所以讀取相應,返回的類型字典dic
用一個迴圈來通過字典的key來看到value就是剛才的內容效果如下:
目前已經把基本的BeautifulSoup的基礎用法方法講完了,其實還可以做很多擴充比如把抓去的資料存入mysql或其它資料庫等,寫入xls表格,由於我這裡主要介紹BeautifulSoup,沒有介紹到,但是可以做就當擴充練習吧
大家可以去學習資料庫的基本用法和語句在結合這個爬去存放,也可以學習python表格的第三方模組把資料寫入excel內這樣也可以顯得更加專業。最後還是提醒只有多練習才能熟練運用這些工具,並且發現問題,
思考,解決與提高。最後也感謝能觀看到此的同學和朋友們,我也會隨後時不時更新講解更好用的庫與方法。