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