思路:简单的爬虫实际上主要是通过查看页面源代码,查看图片标签的表示格式,然后在编写正则进行匹配。
import urllib.request
import codecs
import hashlib
import time
import re
# 使用codecs实现文件自动编码
def parseHtml(url):
webPage = urllib.request.urlopen(url)
data = webPage.read()
data = data.decode('utf-8')
reg = r'(?<=href=\").+?(?=\")|(?<=href=\').+?(?=\')'
htmlre = re.compile(reg)
htmllist = re.findall(htmlre, data)
getImg(data)
return set(htmllist)
# 获得图片地址
def getImg(html):
reg = r'src="(http://*.*?\.jpg)"' # 定义一个正则来匹配页面当中的图片
imgre = re.compile(reg) # 为了让正则更快,给它来个编译
#这个时候做个测试,把匹配的数据都给打印出来
imglist = re.findall(imgre, html) # 通过正则返回所有数据列表
# 把这个地址一个一个的拿下来进行下载
x = 0
for imgurl in imglist:
m=hashlib.md5()
m.update(url.encode('utf-8'))
m.update(str(time.time()).encode('utf-8'))
filename=r'%s.jpg'% m.hexdigest()
try:
urllib.request.urlretrieve(imgurl,'C:/Users/GuiRunning/Desktop/hello/%s' %(filename))
except BaseException as e:
continue
x+=1
print('爬虫完成,爬到%s张图片' %(x))
url='http://www.nipic.com/photo'
list=parseHtml(url)
for item in list:
print(item)
if(item.find("http://") == -1):
item='http://www.nipic.com'+item
try:
parseHtml(item)
except urllib.error.HTTPError as e:
continue
print('爬虫结束')
爬取结果:
image.png
网友评论