鱼C论坛

 找回密码
 立即注册
查看: 3093|回复: 10

[已解决]正则表达式

[复制链接]
发表于 2016-7-20 23:10:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
正则纠结了一天啊,大神进来看看,帮不帮忙也看看啊,头疼!!
我想把高等电磁理论 3.0  80
综合英语(1) 2.0  81
中特 2.0 86
取出来。我写的一直是[]
怎么弄呢?拜谢!!

               <td valign="top" colspan="2">
                    <table class="GridViewStyle" cellspacing="0" rules="all" border="1" id="MainWork_dgData" style="border-color:#9CD7FF;width:100%;border-collapse:collapse;">
        <tr class="GridViewHeaderStyle" style="white-space:nowrap;">
                <td>课程</td><td>课程学分</td><td>选修学期</td><td>成绩</td>
        </tr><tr class="GridViewRowStyle">
                <td>高等电磁理论</td><td>3.0</td><td>1</td><td>80</td>
        </tr><tr class="GridViewRowStyle">
                <td>综合英语(一)</td><td>2.0</td><td>1</td><td>81</td>
        </tr><tr class="GridViewRowStyle">
                <td>中国特色社会主义理论与实践研究</td><td>2.0</td><td>1</td><td>86</td>
        </tr>
</table>
最佳答案
2016-7-21 06:38:49
本帖最后由 SixPy 于 2016-7-22 00:19 编辑

直接把hrml文本粘贴到Excel里,就会自动变成表格了~
  1. import re

  2. html='''               <td valign="top" colspan="2">
  3.                     <table class="GridViewStyle" cellspacing="0" rules="all" border="1" id="MainWork_dgData" style="border-color:#9CD7FF;width:100%;border-collapse:collapse;">
  4.         <tr class="GridViewHeaderStyle" style="white-space:nowrap;">
  5.                 <td>课程</td><td>课程学分</td><td>选修学期</td><td>成绩</td>
  6.         </tr><tr class="GridViewRowStyle">
  7.                 <td>高等电磁理论</td><td>3.0</td><td>1</td><td>80</td>
  8.         </tr><tr class="GridViewRowStyle">
  9.                 <td>综合英语(一)</td><td>2.0</td><td>1</td><td>81</td>
  10.         </tr><tr class="GridViewRowStyle">
  11.                 <td>中国特色社会主义理论与实践研究</td><td>2.0</td><td>1</td><td>86</td>
  12.         </tr>
  13. </table>'''

  14. ptn表=re.compile(r'<table[^>]*?id="MainWork_dgData"[^>]*>.*?</table>',re.S)
  15. ptn行=re.compile(r'<tr[^>]*>.*?</tr>',re.S)
  16. ptn格=re.compile(r'<td[^>]*>(.*?)</td>',re.S)

  17. 表=ptn表.findall(html)
  18. 行=ptn行.findall(表[0])

  19. 格=[]
  20. for td in 行:
  21.     td=ptn格.findall(td)
  22.     格.append(td)
  23.     print(td)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-21 06:38:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 SixPy 于 2016-7-22 00:19 编辑

直接把hrml文本粘贴到Excel里,就会自动变成表格了~
  1. import re

  2. html='''               <td valign="top" colspan="2">
  3.                     <table class="GridViewStyle" cellspacing="0" rules="all" border="1" id="MainWork_dgData" style="border-color:#9CD7FF;width:100%;border-collapse:collapse;">
  4.         <tr class="GridViewHeaderStyle" style="white-space:nowrap;">
  5.                 <td>课程</td><td>课程学分</td><td>选修学期</td><td>成绩</td>
  6.         </tr><tr class="GridViewRowStyle">
  7.                 <td>高等电磁理论</td><td>3.0</td><td>1</td><td>80</td>
  8.         </tr><tr class="GridViewRowStyle">
  9.                 <td>综合英语(一)</td><td>2.0</td><td>1</td><td>81</td>
  10.         </tr><tr class="GridViewRowStyle">
  11.                 <td>中国特色社会主义理论与实践研究</td><td>2.0</td><td>1</td><td>86</td>
  12.         </tr>
  13. </table>'''

  14. ptn表=re.compile(r'<table[^>]*?id="MainWork_dgData"[^>]*>.*?</table>',re.S)
  15. ptn行=re.compile(r'<tr[^>]*>.*?</tr>',re.S)
  16. ptn格=re.compile(r'<td[^>]*>(.*?)</td>',re.S)

  17. 表=ptn表.findall(html)
  18. 行=ptn行.findall(表[0])

  19. 格=[]
  20. for td in 行:
  21.     td=ptn格.findall(td)
  22.     格.append(td)
  23.     print(td)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-21 09:30:05 | 显示全部楼层
看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-21 09:33:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-7-21 09:43:15 | 显示全部楼层
同样没看懂,二楼大神的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-21 23:30:24 | 显示全部楼层
SixPy 发表于 2016-7-21 06:38
直接把hrml文本粘贴到Excel里,就会自动变成表格了~

还是没看懂大神的代码,我把我的代码贴上来,我想把课程名  学分  成绩  形式打印出来,麻烦大神看看。

# -*- coding: utf-8 -*-  

#---------------------------------------  
#   语言:Python 2.7  
#   操作:输入学号和密码  
#   功能:输出成绩的加权平均值也就是绩点  

#---------------------------------------  

  

import urllib   

import urllib2  

import cookielib  

import re

  

class SDU_Spider:   

    # 申明相关的属性   

    def __init__(self):      

        self.loginUrl = 'http://202.203.225.17/pyxx/login.aspx'   # 登录的url  

        self.resultUrl = 'http://202.203.225.17/pyxx/grgl/xskccjcx.aspx' # 显示成绩的url  

        self.cookieJar = cookielib.CookieJar()                                      # 初始化一个CookieJar来处理Cookie的信息  

        #需要POST的数据#  

        self.postdata=urllib.urlencode({

            '__VIEWSTATE':'/wEPDwUENTM4MWQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgIFEmN0bDAwJEltYWdlQnV0dG9uMQUSY3RsMDAkSW1hZ2VCdXR0b24yIMtQ7tgUkLJYzCijVsRRDET9gpV7f7aqkxB7Tj7/Hog=',

            'ctl00$txtusername':'',   

            'ctl00$txtpassword':'',

            'ctl00$txtyzm':'4460',   

            'ctl00$ImageButton1.x':'0',

            'ctl00$ImageButton1.y':'0',   

        })  

        self.weights = []   #存储权重,也就是学分  

        self.points = []    #存储分数,也就是成绩  

        self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookieJar))  

  

    def sdu_init(self):  

        # 初始化链接并且获取cookie  

        myRequest = urllib2.Request(url = self.loginUrl,data = self.postdata)   # 自定义一个请求  

        result = self.opener.open(myRequest)            # 访问登录页面,获取到必须的cookie的值  

        result = self.opener.open(self.resultUrl)       # 访问成绩页面,获得成绩的数据  

        # 打印返回的内容  

        #print result.read()  

        self.deal_data(result.read().decode('utf-8'))  

        self.calculate_date();  

  

    # 将内容从页面代码中抠出来   

    def deal_data(self,myPage):  

        myItems = re.findall(r'</tr><tr class="GridViewRowStyle"><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td>',myPage,re.S|re.M|re.X)     #获取到学分  

        print myItems

        '''

        findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]): 搜索string,

        以列表形式返回全部能匹配的子串。其中RE的常见参数包括:

        re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法)

        re.M(re.MULTILINE): 多行模式,改变'^'和'$'的行为

        re.S(re.DOTALL): 点任意匹配模式,改变'.'的行为

        '''

        for item in myItems:  

            self.weights.append(item[0].encode('utf-8'))  

            self.points.append(item[1].encode('utf-8'))  

              





    #计算绩点,如果成绩还没出来,或者成绩是优秀良好,就不运算该成绩  

    def calculate_date(self):  

        point = 0.0  

        weight = 0.1  

        for i in range(len(self.points)):  

            if(self.points.isdigit()):  

                point += string.atof(self.points)*string.atof(self.weights)  

                weight += string.atof(self.weights)  

        print point,weight  

  



#调用   

mySpider = SDU_Spider()   

mySpider.sdu_init()










想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-21 23:36:56 | 显示全部楼层
SixPy 发表于 2016-7-21 06:38
直接把hrml文本粘贴到Excel里,就会自动变成表格了~


大神啊,竟然真的可以显示,。
但是我想再终端中打印出来,见回复那种。我的正则结果是[],要怎么改呢?
搜狗截图20160721233414.jpg
搜狗截图20160721233713.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-22 00:20:51 | 显示全部楼层
Fairme 发表于 2016-7-21 23:36
大神啊,竟然真的可以显示,。
但是我想再终端中打印出来,见回复那种。我的正则结果是[],要怎么改呢 ...

你运行过二楼的程序吗?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2016-7-22 09:43:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-22 14:49:57 | 显示全部楼层
好文章
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-7-23 00:48:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 19:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表