OJ更新,代碼可能會丢失. 是以要事先備份. 一開始傻傻的複制粘貼, 後來實在不能忍, 得益于大潇的啟發和聰神的原始代碼, 網頁爬蟲走起!
已經有段時間沒看Python, 這次網頁爬蟲的原始代碼是 python2.7版本, 試了一下修改到3.0版本, 要做很多包的更替,感覺比較煩,是以索性就在這個2.7版本上完善了.
首先觀賞一下原始代碼,我給加了一些注釋:
現在這個代碼有兩個問題:
首先,在标簽比對的時候沒有支援多行,也就是爬下來的代碼中仍然包含跨度多行的标簽, 純代碼仍然需要人工提取.
第二,因為代碼頁面并沒有問題的題目資訊,是以僅以題号作為檔案名. 這樣若果更新後的OJ題目順序發生改變, 将無法将題目與代碼進行對應.
針對第一個問題, 修正的方法比較簡單:
在正規表達式比對的時候, 将第二個參數位置加上re.DOTALL即可.
例如:
J = re.compile(r‘語言.*?face=‘,re.DOTALL)
對于第二個問題, 可以根據題号尋找題目的頁面(而非此前代碼的頁面), 然後從題目頁面中提取标題資訊.
在題目頁面中,我發現隻有标題是用<strong><\strong> 标簽修飾的,是以可以這樣比對
sName2=re.findall(r‘<strong>([^<]+)</strong>‘,myPage2,re.S)
另外檔案命名的時候不可以有空格,是以還要濾除空格
sname2=sname2.replace(" ","")
即使這樣,有時在建立檔案時仍然會抛出異常, 但是重新執行一次可能就會不再出現問題.
下面是晚上後的代碼, 修改的地方加粗了.
關于Python的網頁爬取問題,這隻是一個很簡單的demo, 下面還需要深入學習.(如果有時間的話)