运行环境为python3.4
遇到的问题:第一个,通过gethtml(url)返回的是一个字节数组,而正则表达式编译后返回的是一个字符串。findall()函数需要两个参数都是一致的类型。因此由两种解决方式。第一种解决方式是将正则表达式编译成字节码,即 req=b'(http:[^\s]*?\.jpg)';第二种解决方式是将字节字符转换为字符串,即str(字节数组)
第二个问题:正则表达式问题。这点没想通。在python2.0以上的通过使用req=r'src="(.*?\.jpg) "'即可,但在3.0以上则匹配不到任何东西,得使用 req=r'(http:[^\s]*?\.jpg)'这样的形式,欢迎大家指教
第三个问题:通过使用这样的正则表达式,匹配上的字符串包括这两种形式http://www.237.cc/7330jianyue/5332_4.html","pic_url":"http://www.237.cc/uploads/pcline/568_15_1920x1200.jpg', '
http://cdn.t02.pic.sogou.com/ac75323d6b6de243-503c0c74be6ae02f-3913db5c868f40d94849122717709501_i.jpg',
第一种形式的字符串不能直接通过urllib.request.urlretrieve函数解索出来,必须取这个里面的url地址,比较笨拙的办法就是先定位http的位置,在取出该http
import re
#import fileimport struct
import urllib.request
def gethtml(url):#获得指定url上的所有文件
page=urllib.request.urlopen(url)
html=page.read()
print(type(html))
return html
def getImg(html):#获得该网页上所有的照片
#req=r'src="(.*?\.jpg) width"'
# req=r'(http:[^\s]*?jpg)'
req=r'(http:[^\s]*?\.jpg)'
#req=r'([^\s]*?jpg) width'
imgre=re.compile(req)
imglist=re.findall(imgre,str(html))
print(imglist)
print(type(imglist))
x=0
for i in imglist:
if "pic_url" not in i:
print(i)
urllib.request.urlretrieve(i,'%s.jpg'%x)#下载图片
x+=1
else:
nPos =i.index("pic_url")
sStr1 = i[nPos+10:]
print(sStr1)
urllib.request.urlretrieve(sStr1,'%s.jpg'%x)
x+=1