V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
swordspoet
V2EX  ›  问与答

请教一个正则表达式的问题

  •  
  •   swordspoet · 2017-12-17 11:33:53 +08:00 · 1202 次点击
    这是一个创建于 2568 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我在做一个爬虫,目标网页之一是: http://district.ce.cn/newarea/roll/201702/07/t20170207_20020701.shtml

    因为报告往往不止一页,所以,我需要从网页的源代码中找到页面总数,用 BeautifulSoup + lxml 解析后的部分网页代码如下:

    <!--
    function createPageHTML(_nPageCount, _nCurrIndex, _sPageName, _sPageExt){
      if(_nPageCount == null || _nPageCount<=1){
    		return;
    	}
    
    //中间代码省略
    
    }//函数结束符
    //WCM 置标
    createPageHTML(4, 0, "t20170207_20021665", "shtml");	
    //-->
    

    问题:如何用 Python 正则表达式匹配到 createPageHTML(4, 0, "t20170207_20021665", "shtml"); 字符串第一个括号后面的数字?那个数字是页面总数。

    本人正则表达式不够熟练,目前我用的办法是,但是觉得不够好:

    tmp_str = re.findall(r'[^createPageHTML(].*[$,]', str(tmp_html))
        page_sum = tmp_str[1][16]
    

    LI7ZT.jpg

    3 条回复    2017-12-19 11:54:13 +08:00
    lniwn
        1
    lniwn  
       2017-12-17 12:03:08 +08:00 via iPhone   ❤️ 1
    如果是我,我会这样做:
    1 取出所有参数 params=re.search('createPageHTML\((.*?)\)', html_page).group(1)
    2 分割参数列表 params.split(',')

    手机码字不便,trip 等操作就没写了。
    aihimmel
        2
    aihimmel  
       2017-12-17 12:03:09 +08:00   ❤️ 1
    (?<=createPageHTML\()\d+
    Liyuu
        3
    Liyuu  
       2017-12-19 11:54:13 +08:00   ❤️ 1
    page = re.findall(r"createPageHTML\((.+?),",str(wb_text))[1]

    wb_text 是你整个网页的文本
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2797 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 07:43 · PVG 15:43 · LAX 23:43 · JFK 02:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.