吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12723|回复: 59
收起左侧

[Python 原创] 【Python】萌新跟来我入门Python爬虫(二)

  [复制链接]
wushaominkk 发表于 2018-5-16 15:34
本帖最后由 wushaominkk 于 2018-7-31 16:19 编辑

上篇文章讲了爬编程区的帖子,这篇文章讲下如何爬图片
依旧以论坛为例吧,找了半天也没发现什么图片,那就来爬爬论坛勋章的gif图片吧


首先找到论坛勋章的网址,F12找到该网页的源码
如图:


QQ图片20180516151120.png

<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标签:

QQ图片20180516153825.png

我们来打印下看下效果:


QQ图片20180516151757.png

效果依旧不理想,把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


来看下效果

QQ图片20180516152323.png

数据获取到了,那么接下来就是将图片下载带本地了
继续写代码:
首先导入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标签:


那我们来看看效果


QQ图片20180516153026.png

QQ图片20180516153100.png

是不是很激动!


【原创教程】爬百度文库文档内容

【Python】萌新跟来我入门Python爬虫(三)

【Python】萌新跟我来入门Python爬虫

免费评分

参与人数 9吾爱币 +9 热心值 +9 收起 理由
小弦 + 1 热心回复!
kyrzy0416 + 1 + 1 谢谢@Thanks!
丛青 + 1 + 1 谢谢@Thanks!
zuoli886 + 1 + 1 新手专用,建议第三节课讲一个自动化挂机的例子
喜子12131 + 1 + 1 已经处理,感谢您对吾爱破解论坛的支持!
xp9477 + 2 + 1 继续学习
苏紫方璇 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
我住你家隔壁 + 1 + 1 谢谢,正好也在学习,收藏了
13169456869 + 1 最近也在学,收藏了

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| wushaominkk 发表于 2018-5-16 16:23
zdnyp 发表于 2018-5-16 16:12
[mw_shl_code=python,true]for line in html:
    line = html
    #判断是否是gif图片

正则表达式匹配2段内容,存到line集合里面,line[0]图片链接地址,lin[1]是图片名称;然后赋值给变量p1,p2
dograin 发表于 2019-8-6 00:22
感谢! 已学习

[Python] 纯文本查看 复制代码
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[i]
    #判断是否是gif图片
    if str(line[0]).endswith("gif"):
        p1 = line[0]
        p2 = line[1]
        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
想问一下,Chrome的插件Momentum上的背景图片可以爬下来么?

点评

不知道呢,没试过,原理上只要是静态加载的图片都可爬  详情 回复 发表于 2018-5-16 15:48
头像被屏蔽
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
[Python] 纯文本查看 复制代码
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

有两个没看懂...
line[0]是第一符合条件的图片地址吗?
p1和p2是啥意思呢?
求指导一下

点评

正则表达式匹配2段内容,存到line集合里面,line[0]图片链接地址,lin[1]是图片名称;然后赋值给变量p1,p2  详情 回复 发表于 2018-5-16 16:23
gorkys 发表于 2018-5-16 17:08
wushaominkk 发表于 2018-5-16 15:48
不知道呢,没试过,原理上只要是静态加载的图片都可爬

有时间能帮忙瞅瞅么,这插件的图片还是很好看的,如果用Chrome的话还是可以装一个。https://blog.csdn.net/legendavid/article/details/72780378 这里有一份博文说的就是用python去爬,不过我copy下来,并不能运行起来,也尝试了它里面的写的那份接口,并不能请求通。

点评

背景图就一张,直接在源码里找到链接下载就好了  详情 回复 发表于 2018-5-16 17:46
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 15:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表