• 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, s, S 依赖于当前环境
    re.M:多行模式
    re.S:' . '并且包括换行符在内的任意字符(注意:' . '不包括换行符)
    re.U: 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库

    然后通过 findall函数获得所有满足匹配模式的字符串

    3 存入文件

    • 定义file对象,即打开一个文件
    • 定义一个writer进行写文件操作
    • 通过writer的writerrow函数逐行写入文件
    • 关闭文件
  • 相关阅读:
    [BZOJ4034][HAOI2015]树上操作
    [BZOJ1030][JSOI2007]文本生成器
    [BZOJ2763][JLOI2011]飞行路线
    [POJ3667]Hotel
    [codevs1566]染色
    [codevs2460]树的统计
    [BZOJ2667][cqoi2012][kcoj]模拟工厂
    [NOI2009][codevs1846]KCOJ0191]植物大战僵尸
    [POJ1087]A Plug for UNIX
    Educational Round 66 题解
  • 原文地址:https://www.cnblogs.com/wktwj/p/5876294.html
Copyright © 2020-2023  润新知