【问题标题】:How can I match regular expression for this url?如何匹配此网址的正则表达式?
【发布时间】:2015-05-25 06:43:12
【问题描述】:

我有这个网址

http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar

“下载”之后的数字是随机生成的,“mysite.com”之后的两个目录会为每个文件获取随机字符串。

我已尝试使用(\.rar$) 查找文件扩展名以下载文件,但问题是该页面上的其他链接具有以 .rar 文件结尾的 url,它不是实际的下载链接。因此,通过扩展名查找下载链接在这里无济于事。我需要一个像下面这样的模式。

http://download\[random_no_here\].mysite.com/\[randomstring_number_included here/\[another_randomstring_with_number_included_here/the_actual_file_here_with_random_name.rar

【问题讨论】:

    标签: python regex web-scraping


    【解决方案1】:

    这个正则表达式会做你想做的事:

    r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar'
    

    \d 匹配数字,\w 匹配字母数字(包括下划线); + 表示匹配一个或多个先前的模式。我们在.com.rar 前面使用\,这样. 就可以按字面意思解释,而不是正则表达式通配符。

    测试

    import re
    
    p = re.compile(r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar')
    
    table = [
        'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar',
        'http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw',
        'http://download123.mysite.com/456/789/upload.rar',
        'http://downloadabc.mysite.com/def/ghi/upload.rar',
        'http://download1234.mysite.com/def/ghi/upload.rar',
        'http://download1234.mysite.org/def/ghi/upload.rar',
    ]
    
    for s in table:
        m = p.match(s)
        print s, m is not None
    

    输出

    http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar True
    http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.raw False
    http://download123.mysite.com/456/789/upload.rar True
    http://downloadabc.mysite.com/def/ghi/upload.rar False
    http://download1234.mysite.com/def/ghi/upload.rar True
    http://download1234.mysite.org/def/ghi/upload.rar False
    

    如果实际文件名不同,则可以使用

    r'http://download\d+\.mysite\.com/\w+/\w+/\w+\.rar'
    

    r'http://download\d+\.mysite\.com/\w+/\w+/[a-z]+\.rar'
    

    如果名称总是小写字母


    顺便说一句,它通常是not a good idea to parse HTML with regex,但如果页面格式是固定的并且相当简单,你也许可以摆脱它。

    【讨论】:

    • 我正在使用它来查找python和beautifulsoup中的链接。 link2 = soup2.findAll(href=re.compile(''http://download\d+\.mysite\.com/\w+/\w+/[a-z]+\.rar'')) 但没有找到链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2013-01-29
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多