如何匹配此网址的正则表达式?

时间:2015-03-22 03:15:04

标签: python regex web-scraping

我有这个网址

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

下载后的数字'是随机生成的,并且是在mysite.com'之后的那两个目录。获取每个文件的随机字符串。

我已尝试使用(\.rar$)查找文件扩展名以下载该文件,但问题是该页面上还有其他链接,其中的网址以.rar文件结尾,并非实际下载链接。因此,通过扩展程序查找下载链接对此没有帮助。我需要一个类似下面的模式。

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

1 个答案:

答案 0 :(得分:0)

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

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,但如果页面格式固定且相当简单,您可以侥幸使用它。