使用正则表达式进行图片下载并匹配对应名称
正则表达式的相关知识可以在网上自行学习,本文仅供参考。
提到了一些初学者容易碰到的问题,希望有需要的人有所帮助
import re
import urllib.request
def craw(url,page):
html1=urllib.request.urlopen(url).read().decode('utf-8')#不进行编码的话,爬取出来的都是乱码
pattern1='<!--mydatastart-->.*?<!--mydataend-->'#.*?是懒惰模式,匹配到相应结尾则停止匹配
result1=re.findall(pattern1,html1,re.S)
result1=result1[0]#此处由于findall函数返回的是列表对象,所以要提取出来
pattern2='https://up.enterdesk.com/edpic_360_360/.*?\.jpg'
pattern3="[\u4e00-\u9fa5]{4,10}"#匹配长4,10的中文字符串
imagename1=re.findall(pattern3,result1,re.S)#获取图片名字
result2=re.findall(pattern2,result1,re.S)#获取图片链接
imagename2=list(set(imagename1))
imagename2.sort(key=imagename1.index)#将列表元素去重并保留原有序列
imagelist=result2
x=0
for imageurl in imagelist:
try:
imagepath = 'D:\照片\%s.jpg' % imagename2[x]
urllib.request.urlretrieve(imageurl,filename=imagepath)
except urllib.error.URLError:
print('出错啦')
x+=1
except IndexError:
print('-----结束啦-----')
x+=1
for i in range(1,2):
url='https://tu.enterdesk.com/zhiwu/%d.html'%i#仅下载一页内容作为示范
page=i
craw(url,page)