有人說簡書首頁上的雞湯文很多,雖然我看到不少干貨和很好的作者,為了用數(shù)據(jù)來說明,就想到用Python把數(shù)據(jù)抓取下來做一個分析,看看首頁的熱門上有多少雞湯文,有多少關(guān)于IT編程的文章,簡書上評論和寫作的群體有什么特點。
完成:把簡書首頁熱門文章標(biāo)題,鏈接,閱讀量、評論、打賞爬取下來,保存到一個Excel文件中。每天定時抓取數(shù)據(jù),Excel進行分類匯總分析,再對一些文章翻閱。
再對熱門文章中的評論者信息抓取分析,對文章點“喜歡”的用戶抓取分析(從郵件中抓取用戶,反向獲得信息)
之前Python看過半天時間,這次學(xué)習(xí),不系統(tǒng),直接拿現(xiàn)成的代碼理解,一邊測試一邊coding 完成一個小功能。從網(wǎng)上的一小段代碼(抓取圖片Demo)開始學(xué)習(xí),一步步增加功能:
- 獲取網(wǎng)頁代碼(urllib2)
- 解析網(wǎng)頁(正則表達式,BeautifulSoup)
- 從最簡單開始,測試拿到網(wǎng)頁中所有的圖片,保存到本地(抓取網(wǎng)站圖片)
- 把頁面中所有文章的標(biāo)題拿到,打印出來
- 拿到一組數(shù)據(jù)(標(biāo)題,鏈接,閱讀量、評論、打賞),按格式打印
- 把抓取的數(shù)據(jù)寫入Excel(xlwt)
- 安裝第三方庫 xlwt
- 測試寫入數(shù)據(jù)到excel(中文的寫入)
- 封裝方法,把抓取的數(shù)據(jù)寫入excel
- 開啟定時任務(wù)
以上功能完成后,再回過頭把我忽略的基礎(chǔ)知識快速過一遍。
遇到的問題:
正則表達式,urllib2直接讀取到網(wǎng)頁后,需要用正則表達式匹配取出文章標(biāo)題等信息。主要在匹配文章標(biāo)題、閱讀數(shù)量,換行、空格的匹配上試了多次,在取出關(guān)聯(lián)數(shù)據(jù)上花了一些時間。
開始采取的方法正則表達式直接匹配網(wǎng)頁的方式,對網(wǎng)頁代碼進行分析,找出標(biāo)題,鏈接,閱讀量、評論的代碼的特征。后來采用BeautifulSoup
Excel庫引入的問題。在命令行安裝xlwt,控制臺上可以使用,但是在PyCharm不能使用xlwt,顯示沒有導(dǎo)入庫。Mac中PyCharm添加第三庫的地方一直沒有找到,最后只好用搜索的方式,搜Project Interpreter找到。 (但是在安裝BeautifulSoup后,PyCharm中就直接可以用了)

BeautifulSoup在命令行pip安裝失敗,直接下載源碼進行安裝。
Excel追加數(shù)據(jù)和寫入數(shù)據(jù)不同,xlwt操作每次會重寫excel文件,追加寫入數(shù)據(jù)用xlutils,在PyCharm中xlutils也沒有什么代碼提示和補全。
rb = open_workbook(filename) #應(yīng)該是以只讀的方式拿到文件
wb = copy(rb) #拷貝成一個可寫的工作簿?
sheet = wb.get_sheet(0)
sheet.write(0, 0, value.decode('utf-8')) #寫入中文
wb.save(filename)
從這段代碼開始
import re
import urllib
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
def getImg(html):
reg = r'src="(.+?\.jpg)" pic_ext'
imgre = re.compile(reg)
imglist = imgre.findall(html)
x = 0
for imgurl in imglist:
urllib.urlretrieve(imgurl,'%s.jpg' % x)
x = x + 1
html = getHtml("http://tieba.baidu.com/p/2460150866")
getImg(html)
就是對以上代碼的拆解,按上述步驟添加我設(shè)想的功能,再進行封裝。
體會:
- Python上手比較快,學(xué)習(xí)成本低,大部分內(nèi)容我參照Java來理解,函數(shù)式編程方便快捷,可以說是write less, do more
- 一些庫的用法我還沒有很好理解,但能經(jīng)過調(diào)試快速做出東西來,還需要深入了解。如xlwt, 特別是xlutils可能沒有找到類的特性,不像urllib2在IDE中有提示就可以直接知道怎么用。
- 下一步多看一些github上的代碼,搞一些小工具和好玩的東西。