本帖最后由 wushaominkk 于 2018-7-31 16:19 编辑
上篇文章讲了爬编程区的帖子,这篇文章讲下如何爬图片
依旧以论坛为例吧,找了半天也没发现什么图片,那就来爬爬论坛勋章的gif图片吧
首先找到论坛勋章的网址,F12找到该网页的源码
如图:
<img src="https://static.52pojie.cn/static/image/common/5yeas.gif" alt="五年荣誉奖章" style="margin-top: 20px;width:auto; height: auto;">
开始写代码:
[Python] 纯文本查看 复制代码 import urllib.request
import re
import os
url="https://www.52pojie.cn/home.php?mod=medal"#爬的地址
#<img src="https://static.52pojie.cn/static/image/common/5yeas.gif" alt="五年荣誉奖章" style="margin-top: 20px;width:auto; height: auto;">
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
#print(page)
#正则表达式
zz = r'<img src="([url=https://static.52pojie.cn/static/image/common/.+?]https://static.52pojie.cn/static/image/common/.+?[/url])" alt="(.+?)" style=".+?">'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
print(html)
代码插入有点问题,正则表达式是这样的不要误导了没有前面的url标签:
我们来打印下看下效果:
效果依旧不理想,把png的图片也给匹配出来了
那么来改进下利用for循环来讲集合里面的数据分离,然后判断链接是否是以gif为结尾
[Python] 纯文本查看 复制代码 i = 0
for line in html:
line = html[i]
#判断是否是gif图片
if str(line[0]).endswith("gif"):
p1 = line[0]
p2 = line[1]
print(p2 + " " + p1)
i = i + 1
来看下效果
数据获取到了,那么接下来就是将图片下载带本地了
继续写代码:
首先导入os库
[Python] 纯文本查看 复制代码 import os
写个方法创建文件夹
[Python] 纯文本查看 复制代码 def mkdir(path):
folder = os.path.exists(path)
if not folder: # 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) # makedirs 创建文件时如果路径不存在会创建这个路径
print("创建新文件夹")
print("创建成功")
else:
print("该文件夹已经存在")
调用方法,将文件夹路径传入
[Python] 纯文本查看 复制代码 img_path = "D:/photo/"
mkdir(img_path)
下载gif图片放到D:/photo/文件夹里面
[Python] 纯文本查看 复制代码 url = p1
#下载gif图片放到D:/photo/文件夹里面
web = urllib.request.urlopen(url)
data = web.read()
f = open(img_path + p2 +".gif", "wb")
f.write(data)
f.close()
代码写完了
完整代码:
[Python] 纯文本查看 复制代码 import urllib.request
import re
import os
url="https://www.52pojie.cn/home.php?mod=medal"#爬的地址
#<img src="https://static.52pojie.cn/static/image/common/5yeas.gif" alt="五年荣誉奖章" style="margin-top: 20px;width:auto; height: auto;">
page=urllib.request.urlopen(url).read()#获取到该地址的所有内容
page=page.decode('gbk') #转码
#print(page)
#正则表达式
zz = r'<img src="([url=https://static.52pojie.cn/static/image/common/.+?]https://static.52pojie.cn/static/image/common/.+?[/url])" alt="(.+?)" style=".+?">'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
#print(html)
def mkdir(path):
folder = os.path.exists(path)
if not folder: # 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) # makedirs 创建文件时如果路径不存在会创建这个路径
print("创建新文件夹")
print("创建成功")
else:
print("该文件夹已经存在")
img_path = "D:/photo/"
mkdir(img_path)
i = 0
for line in html:
line = html[i]
#判断是否是gif图片
if str(line[0]).endswith("gif"):
p1 = line[0]
p2 = line[1]
print(p2 + " " + p1)
url = p1
#下载gif图片放到D:/photo/文件夹里面
web = urllib.request.urlopen(url)
data = web.read()
f = open(img_path + p2 +".gif", "wb")
f.write(data)
f.close()
i = i + 1
代码插入有点问题,正则表达式没有前面的url标签:
那我们来看看效果
是不是很激动!
【原创教程】爬百度文库文档内容
【Python】萌新跟来我入门Python爬虫(三)
【Python】萌新跟我来入门Python爬虫
|