我有这个网址
http://download2142.mysite.com/d0kz4p5p3uog/api60w0g1o1jil1/upload.rar
“下载”之后的数字是随机生成的,“ mysite.com”之后的这两个目录会为每个文件获取随机字符串。
我试着(\.rar$)
找到文件扩展名来下载文件,但是问题是该页面上还有其他链接,这些链接的URL以.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
此正则表达式将执行您想要的操作:
r'http://download\d+\.mysite\.com/\w+/\w+/upload\.rar'
\d
匹配数字,\w
匹配字母数字(包括下划线);在+
说匹配一个或多个前面的格局。我们\
在.com
和前面使用a ,.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'
如果名称始终是小写字母
顺便说一句,用regex解析HTML通常不是一个好主意,但是如果页面格式是固定的并且相当简单,则可以摆脱它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句