给定页面源中有几个图像和一个word文档,我试图通过将它们与我编写的正则表达式"\w+\.\w{1,4}"
进行匹配来安装所有图像
是正则表达式适合与否?
这段代码是否正确retrieve = urllib.urlretrieve(i,'C:\Python27')
这是我的代码:
import sys, urllib, re
def retriev_files(page):
open_page = urllib.urlopen(page)
contents = open_page.read()
find_files = re.findall("\w+\.\w{1,4}",contents)
for i in find_files:
try:
print " retrieving %s ... " %i
retrieve = urllib.urlretrieve(i,'C:\Python27')
print " done !! "
return retrieve
except urllib.urlretrieve as err:
pass
def main():
print retriev_files("http://www.soc.napier.ac.uk/~40001507/CSN08115/cw_webpage/index.html")
if __name__ == "__main__":
main()
答案 0 :(得分:0)
您的代码有几个问题
你的正则表达式会捕获任何一些字符后跟一个或多个字符,可能是icon_clown.gif,也可能是r.macf,它是电子邮件地址的一部分。在这里看看这个着名的answer,以了解为什么RegEx不是解析HTML的好方法。尝试使用beautifulsoup或者Selenium之类的东西来从网页上获取数据。
return retrieve
只会检索第一张图片然后退出您的功能。您可以定义列表retrieved_images
,然后使用retrieved_images.append(retrieve[0])
并最终返回列表
[0]
的原因)。第二个参数需要是文件名而不是路径。icon_clown.gif
,但它并没有为您提供完整路径,即您需要将page
中的网址与您的RegEx匹配合并,例如以下行可能适用于大多数情况,例如:当只给出相对图像URL时。
urllib.urlretrieve(path[0:path.rfind('/')] + '/' file)