我正在做一个爬虫.用户可以指定正则表达式字符串来下载数据.
当用户输入表格是:
http://xxx/abc[x-z]/image(9|10|11).png
Run Code Online (Sandbox Code Playgroud)
我想下载这些.
http://xxx/abcx/image9.png
http://xxx/abcy/image9.png
http://xxx/abcz/image9.png
http://xxx/abcx/image10.png
http://xxx/abcy/image10.png
http://xxx/abcz/image10.png
http://xxx/abcx/image11.png
http://xxx/abcy/image11.png
http://xxx/abcz/image11.png
Run Code Online (Sandbox Code Playgroud)
我可以从上面的正则表达式字符串创建以下列表吗?或者,我可以在for-in块中使用每个字符串吗?
如果您想要将用户的给定正则表达式作为输入并生成字符串列表,则可以使用库sre_yield:
但是,要非常清楚,尝试解析每个可能的正则表达式字符串可能会很快失控.您需要确保您的用户了解通配符和开放结束或重复组可能对可能匹配的字符串数量的影响.
例如,你的正则表达式字符串:http://xxx/abc[x-z]/image(9|10|11).png不会转义.,这是任何字符的通配符,因此它会生成许多意外的字符串.相反,我们需要转义它,如下例所示:
>>> import sre_yield
>>> links = []
>>> for each in sre_yield.AllStrings(r'http://xxx/abc[x-z]/image(9|10|11)\.png'):
links.append(each)
Run Code Online (Sandbox Code Playgroud)
或者更简单 links = list(sre_yield.AllStrings(r'http://xxx/abc[x-z]/image(9|10|11)\.png'))
结果是:
>>> links
['http://xxx/abcx/image9.png', 'http://xxx/abcy/image9.png',
'http://xxx/abcz/image9.png', 'http://xxx/abcx/image10.png',
'http://xxx/abcy/image10.png', 'http://xxx/abcz/image10.png',
'http://xxx/abcx/image11.png', 'http://xxx/abcy/image11.png',
'http://xxx/abcz/image11.png']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2015 次 |
| 最近记录: |