【Python】萌新跟来我入门Python爬虫(二)
本帖最后由 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;">
开始写代码:
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="(https://static.52pojie.cn/static/image/common/.+?)" alt="(.+?)" style=".+?">'
#匹配所有符合规则的内容存到html集合里面
html=re.findall(zz,page,re.S)#re.S表示.可以代表\n
print(html)
代码插入有点问题,正则表达式是这样的不要误导了没有前面的url标签:
我们来打印下看下效果:
效果依旧不理想,把png的图片也给匹配出来了
那么来改进下利用for循环来讲集合里面的数据分离,然后判断链接是否是以gif为结尾
i = 0
for line in html:
line = html
#判断是否是gif图片
if str(line).endswith("gif"):
p1 = line
p2 = line
print(p2 + " " + p1)
i = i + 1
来看下效果
数据获取到了,那么接下来就是将图片下载带本地了
继续写代码:
首先导入os库
import os
写个方法创建文件夹
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)
下载gif图片放到D:/photo/文件夹里面
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()
代码写完了
完整代码:
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="(https://static.52pojie.cn/static/image/common/.+?)" 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
#判断是否是gif图片
if str(line).endswith("gif"):
p1 = line
p2 = line
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爬虫
zdnyp 发表于 2018-5-16 16:12
for line in html:
line = html
#判断是否是gif图片
正则表达式匹配2段内容,存到line集合里面,line图片链接地址,lin是图片名称;然后赋值给变量p1,p2 感谢! 已学习
import requests
import re
import os
#<img src="https://static.52pojie.cn/static/image/common/5yeas.gif" alt="五年荣誉奖章" style="margin-top: 20px;width:auto; height: auto;">
url="https://www.52pojie.cn/home.php?mod=medal"
header = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"}
#获取该地址的所有内容并转码
page = requests.get(url, headers=header).content.decode('gbk','ignore')
#正则表达式
pattern = re.compile('<img src="(https://static.52pojie.cn/static/image/common/.+?)" alt="(.+?)" style=".+?">', re.S)
#匹配所有符合规则的内容存到html集合里面
html=pattern.findall(page)
# print(html)
#写个方法创建文件夹
def mkdir(path):
folder = os.path.exists(path)
if not folder:# 判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path)# makedirs 创建文件时如果路径不存在会创建这个路径
print("创建新文件夹")
print("创建成功")
else:
print("该文件夹已经存在")
# 调用方法,将文件夹路径传入
img_path = "./photo/"
mkdir(img_path)
# 利用for循环来将集合里面的数据分离,然后判断链接是否是以gif为结尾,并存放图片
i = 0
for line in html:
line = html
#判断是否是gif图片
if str(line).endswith("gif"):
p1 = line
p2 = line
print(p2 + " " + p1)
url = p1
#下载gif图片放到D:/photo/文件夹里面
data = requests.get(url,headers=header).content
f = open(img_path + p2 +".gif", "wb")
f.write(data)
f.close()
i = i + 1
{:1_921:}想问一下,Chrome的插件Momentum上的背景图片可以爬下来么? gorkys 发表于 2018-5-16 15:40
想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?
不知道呢,没试过,原理上只要是静态加载的图片都可爬 学习爬虫爬虫 gorkys 发表于 2018-5-16 15:40
想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?
感谢分享。。。。。。 厉害了,正想学。。 for line in html:
line = html
#判断是否是gif图片
if str(line).endswith("gif"):
p1 = line
p2 = line
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
有两个没看懂...
line是第一符合条件的图片地址吗?
p1和p2是啥意思呢?
求指导一下 wushaominkk 发表于 2018-5-16 15:48
不知道呢,没试过,原理上只要是静态加载的图片都可爬
有时间能帮忙瞅瞅么,这插件的图片还是很好看的,如果用Chrome的话还是可以装一个。https://blog.csdn.net/legendavid/article/details/72780378 这里有一份博文说的就是用python去爬,不过我copy下来,并不能运行起来,也尝试了它里面的写的那份接口,并不能请求通。