我有一个正则表达式来获取HTML文档中的一些链接。
((http://)(|up)(\.example\.com))*(/uploads/pp2p|/sites/default/files/[-_a-zA-Z0-9%/]+)\.(jpg|jpeg|gif|png)
我打算匹配的是,如果http
部分存在,则匹配,否则不匹配。如果存在up
部分,则匹配,否则不匹配。如果存在example.com
,则匹配,否则不匹配。关于/uploads/pp2p
和另一个的相同,如果存在则匹配,否则不匹配。最后,如果它具有以下图像格式之一,则匹配,否则不匹配。我希望得到一个像
links = ['http://up.example.com/uploads/pp2p/www.jpg', '/sites/default/files/.png', 'http://example.com/uploads/zzz.jpg']
链接中的元素继续填充不同的组合。无论如何,我得到的结果就像
这样的元组[('', '', '', '', '/sites/default/files/favicon', 'png'), ('', '', '', '', '/sites/default/files/logo_2', 'png')]
我不想得到一个元组,我希望将比赛整体表示出来。每个列表元素中只有一个完整的链接。如何避免因正则表达式匹配而获得元组?
答案 0 :(得分:1)
我假设您正在从某个网页上获取图像。
以下是使用lxml.html抓取所有图片src链接的快捷方式:
from lxml.html import parse
import re
doc = parse('http://www.androidpolice.com').getroot()
links = []
img_list = []
for img in doc.cssselect('img'):
links.append(img.get('src'))
for link in links:
match = re.search(".*androidpolice\.com.*",link)
if match:
img_list.append(match.group(0))
for img in img_list:
print(img)
给出输出:
http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2015%2F05%2Fnexus2cee_gamethumb_thumb1.png&h=128&zc=3
http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2015%2F05%2Fnexus2cee_gamethumb_thumb1.png&w=150&h=75&f=8|8|8|8|8|8|8|8|8|8|8|8|8
http://www.androidpolice.com/wp-content/themes/ap2/ap_resize/ap_resize.php?src=http%3A%2F%2Fwww.androidpolice.com%2Fwp-content%2Fuploads%2F2014%2F06%2Fnexusae0_Google-Photos-icon-logo-150x150.png&h=128&zc=3
----- [输出截断] -----
然后你可以(?:%2F)([\w-]+\.(?:png|jpg))
来获取所有图像名称(当然只是一个例子)。 I.E. nexus2cee_gamethumb_thumb1.png
更新代码
将其更改为仅在每个链接中搜索androidpolice.com
。您可以在6.2. re — Regular expression operations上找到有关使用re
模块的更多信息。