wushaominkk 发表于 2018-5-16 15:34

【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爬虫

wushaominkk 发表于 2018-5-16 16:23

zdnyp 发表于 2018-5-16 16:12
for line in html:
    line = html
    #判断是否是gif图片


正则表达式匹配2段内容,存到line集合里面,line图片链接地址,lin是图片名称;然后赋值给变量p1,p2

dograin 发表于 2019-8-6 00:22

感谢! 已学习

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



gorkys 发表于 2018-5-16 15:40

{:1_921:}想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?

Fcous-lq 发表于 2018-5-16 15:46

wushaominkk 发表于 2018-5-16 15:48

gorkys 发表于 2018-5-16 15:40
想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?

不知道呢,没试过,原理上只要是静态加载的图片都可爬

zrff 发表于 2018-5-16 15:48

学习爬虫爬虫

13169456869 发表于 2018-5-16 16:03

gorkys 发表于 2018-5-16 15:40
想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?

感谢分享。。。。。。

A羽飞 发表于 2018-5-16 16:10

厉害了,正想学。。

zdnyp 发表于 2018-5-16 16:12

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是啥意思呢?
求指导一下

gorkys 发表于 2018-5-16 17:08

wushaominkk 发表于 2018-5-16 15:48
不知道呢,没试过,原理上只要是静态加载的图片都可爬

有时间能帮忙瞅瞅么,这插件的图片还是很好看的,如果用Chrome的话还是可以装一个。https://blog.csdn.net/legendavid/article/details/72780378 这里有一份博文说的就是用python去爬,不过我copy下来,并不能运行起来,也尝试了它里面的写的那份接口,并不能请求通。
页: [1] 2 3 4 5 6
查看完整版本: 【Python】萌新跟来我入门Python爬虫(二)