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, s, S 依赖于当前环境
re.M:多行模式
re.S:' . '并且包括换行符在内的任意字符(注意:' . '不包括换行符)
re.U: 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库
然后通过 findall函数获得所有满足匹配模式的字符串
3 存入文件
- 定义file对象,即打开一个文件
- 定义一个writer进行写文件操作
- 通过writer的writerrow函数逐行写入文件
- 关闭文件