Python 3 代码,获取图片不在是src开头,另外图片结尾有jpg和npg。特别是下载重命名时不能都命名为jpg格式。
# get html req = urllib.request.urlopen('https://www.imooc.com/course/list') buf_html = req.read().decode('utf-8') images_tmp = re.findall(r'data-original=.*(?:jpg|png)', buf_html) #get image url list img_urls = [] for ins in images_tmp: t = re.split(r'//', ins) img_urls.append('http://' + t[1]) i = 1 for url in img_urls: fileName = open(str(i) + '.' + re.split(r'\.', url)[-1], 'wb') req1 = urllib.request.urlopen(url) buf_image = req1.read() fileName.write(buf_image) i += 1
#环境python3.7 import re import urllib.request req=urllib.request.urlopen('https://www.imooc.com/course/list')#读取网站 buf=req.read().decode('utf-8')#读取网站中的字符串 listurl1=re.findall(r'//img.+\.jpg',buf)#找到匹配对象 str1=' '.join(listurl1)#在前面添加https: subhttps=re.sub(r'//','https://',str1) sht=re.split(r' ',subhttps) #保存图片 i=0 for url in sht: f=open(str(i)+'.jpg','wb+')#打开一个文件(文件名,写入方式)若不存在就会创建,wb+才支持byte的写入 req=urllib.request.urlopen(url) buf=req.read() f.write(buf) i+=1
抓取网页中的图片到本地:
抓取网页
import urllib2
req=urllib2.urlopen(url)
buf=req.read()
获取图片地址
抓取图片内容并保存到本地
i = 0
for url in listurl:
file = open('D:/python/'+str(i)+'.jpg','w')
req = urllib2.urlopen(url)
buf = req.read()
file.write(buf)
i += 1
time.sleep(1)
第一步,初始化变量i=1。
第二步,遍历URL列表中的每一个图片的URL
第三步,打开一个文件并返回一个文件对象file,如果文件不存在,则创建文件,w是以只写的方式打开
第四步,用urlopen()方法远程请求url的数据并返回一个文件对象req
第五步,读取文件对象的内容,保存到变量buf
第六步,将内容写到file里面
第七步,i 自增,也就是通过变量自增达到文件名不能相同的目的
第八步,调用time模块的sleep()方法,可以将程序在这一步暂停1秒钟
第九步,关闭文件对象,老师没有写,file.close(),这句尽量要写,否则文件可能有问题,具体自己了解吧
没了~。~
程序在windows下运行需要写一个相对路径,如:把 str(i)+'\.jpg'变成'D:\\'+str(i)+'\.jpg',图片就会生成在D盘根目录下:)
import re from urllib import request def spider_mm(): #<img src="http://i1.whymtj.com/uploads/tu/201905/10220/z6cs1a6z.jpg" width="180" height="270" /> req = request.urlopen('http://www.umei.cc/meinvtupian/') buf = req.read().decode('utf-8') #print(buf) list_url = re.findall(r'src=.+\.jpg', buf) #print(list_url) # 把src="去掉 for i in range(len(list_url)): list_url[i] = re.sub(r'src="', '', list_url[i]) print(list_url[i]) i = 0 for url in list_url: #读取并保存到本地 f = open('E:\\image\\' + str(i) + '.jpg', 'wb+') #req = request.urlopen('http:' + url) # 必须要加上http: req = request.urlopen( url) # 必须要加上http: buf = req.read() f.write(buf) f.close() i += 1 if __name__=="__main__": spider_mm()
课程编译环境: python 2.7
简单爬取网页步骤:
1)分析网页元素
2)使用urllib2打开链接
3)读取链接文本
4)使用re匹配出期望文本内容并分条存入list
5)创建文件定义文件名规则,并将list中的链接逐条用urllib2打开后写入
抓网页, 抓图片地址, 抓图片内容并保存本地
Urllib:
Python3中将Python2.7的urllib和urllib2两个包合并成了一个urllib库,其主要包括以下模块:
urllib.request 请求模块
urllib.request.urlopen(url)
from urllib import request
request.urlopen()
urlopen返回对象提供方法:
read() , readline() ,readlines() , fileno() , close() :对HTTPResponse类型数据进行操作。
info():返回HTTPMessage对象,表示远程服务器返回的头信息。
getcode():返回Http状态码。
geturl():返回请求的url。
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
python3代码
import re
from urllib import request
url = 'https://www.imooc.com/course/list'
html = request.urlopen(url).read().decode('utf-8')
listurl = re.findall(r'src=.+\.jpg',html)
for i in range(len(listurl)):
listurl[i] = re.sub(r'src="','',listurl[i]) #把src="去掉
i = 1
for url in listurl:
f = open('E:\\test\\imooc\\scrap\\data\\'+str(i)+'.jpg','wb+')
html = request.urlopen('https:'+url).read() #必须要加上https:
f.write(html)
f.close()
i += 1