Python学习之静态页面数据抓取

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函数库获取网页内容,具体步骤如下

  1. 构建request请求,传入请求的url
  2. 通过urlopen(url, data, timeout)函数得到一个response对象,即返回的页面信息就存储在该对象中
  3. 通过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函数逐行写入文件
  • 关闭文件

 

posted @ 2016-09-16 13:06  康小武  阅读(2772)  评论(0编辑  收藏  举报