1 頁面信息抓取
定義getPage函數,根據傳入的頁碼get到整個頁面的html內容
getContent函數,通過正則匹配把頁面中的表格部分的html內容取出
最后定義getData函數,同樣是通過正則匹配把getContent函數得到的具體表格內容取出,存儲在dat[]數組中
1 class PC: 2 #初始化 3 def __init__(self,baseUrl): 4 self.baseURL = baseUrl 5 self.tool = Tool() 6 def getPage(self,pageNum): 7 try: 8 url = self.baseURL + str(pageNum) 9 request = urllib2.Request(url) 10 response = urllib2.urlopen(request) 11 #print response.read() 12 return response.read().decode('utf-8') 13 except urllib2.URLError,e: 14 if hasattr(e,"reason"): 15 print e.reason 16 return None 17 def getContent(self,pageNum): 18 page = self.getPage(pageNum) 19 pattern = re.compile('<tr class="table-link.*?>(.*?)</tr>',re.S) 20 result = re.findall(pattern,page) 21 if result: 22 #x = self.tool.replace(result[0]) 23 #print x.strip() 24 return result 25 else: 26 return None 27 def getData(self,result): 28 reLen = len(result) 29 pattern = re.compile('<td class="">(.*?)</td>',re.S) 30 k = 0 31 for i in range(0,reLen): 32 d = re.findall(pattern,result[i]) 33 dat[k]={"Filing_Name":d[0],"Filing_Date":d[1],"District_Court":d[2],"Exchange":d[3],"Ticker":d[4]} 34 k += 1 35 num = k 36 return dat
2 將結果存儲在scv文件
1 csvfile = file('aa.csv','wb') 2 writer = csv.writer(csvfile) 3 for i in range(1,214): 4 print i 5 res = pc.getContent(i) 6 da = pc.getData(res) 7 if (len(da)!=0): 8 for k in range(0,len(da)): 9 writer.writerow([(dat[k]["Filing_Name"]).strip(),(dat[k]["Filing_Date"]).strip(),(dat[k]["District_Court"]).strip(),(dat[k]['Exchange']).strip(),(dat[k]['Ticker']).strip()])
主要內容
1 獲取頁面內容
Python提供了強大的urllib2函數庫獲取網頁內容,具體步驟如下
- 構建request請求,傳入請求的url
- 通過urlopen(url, data, timeout)函數得到一個response對象,即返回的頁面信息就存儲在該對象中
- 通過read()方法讀出頁面信息
2 正則匹配
該頁面抓取主要利用 re.compile(pattern[, flags])函數獲得一個匹配模式,即一個正則表達式對象
flags定義包括:
re.I:忽略大小寫
re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依賴於當前環境
re.M:多行模式
re.S:' . '並且包括換行符在內的任意字符(注意:' . '不包括換行符)
re.U: 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依賴於 Unicode 字符屬性數據庫
然后通過 findall函數獲得所有滿足匹配模式的字符串
3 存入文件
- 定義file對象,即打開一個文件
- 定義一個writer進行寫文件操作
- 通過writer的writerrow函數逐行寫入文件
- 關閉文件