写个爬虫,爬图片,mzitu

本文介绍了一个使用Python进行网页爬虫的实例,目标是抓取Mzitu网站上的图片。在代码中,作者通过设置headers以应对网站的反爬机制,并利用requests库和正则表达式进行数据清洗。re.search用于查找匹配,group方法用于获取匹配内容,而re.sub则用于替换操作。虽然urllib.request也常用,但作者认为requests库更加简洁易用。

直接上代码:

值得注意的是这个网站有反爬机制,我在headers里加了"Referer": “https://www.mzitu.com/”。
很多网站站也有,比如哔哩哔哩动画

在这里插入图片描述

个人觉得requests比urllib.request好用一点,更简洁。
用到了re模块来清洗数据
search返回match对象,用group获取内容,
m.group() == m.group(0) == 所有匹配的字符(即匹配正则表达式整体结果)
group(1) 列出第一个括号匹配部分,group(2) 列出第二个括号匹配部分,group(3) 列出第三个括号匹配部分。
m.groups() 返回所有括号匹配的字符,以tuple格式。m.groups() == (m.group(0), m.group(1), …)

  1. 没有匹配成功的,re.search()返回None

  2. 当然正则表达式中没有括号,group(1)肯定不对了。

re.sub(pattern, repl, string, count=0, flags=0)

其中三个必选参数:pattern, repl, string

两个可选参数:count, flags

# -*- coding = utf-8 -*-
# @time:2020/12/7 22:05
# Author:Vab
# @File:mzitu.py
# @Software:PyCharm
import re
import requests
import os.path


headers = {
    "Referer": "https://www.mzitu.com/",
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'
}   #headers里边的“Referer”是这个网站反爬技术,要把这个加上


def savePic(img_url):
    try:
        tupian = requests.get(img_url, headers=headers).content
    except Exception as w:
        print("图片加载失败!")
        return		#异常处理
    with open('D:\\aaa\\'+os.path.basename(img_url),'wb') as fp:  #图片要二进制写入
        fp.write(tupian)


def geturl():
    for i in range(1,89):
        if i == 1:
            url = 'https://www.mzitu.com/204419'
        else:
            url = 'https://www.mzitu.com/204419'+'/'+str(i)  #取2-88张图片的url
        try:
            req = requests.get(url, headers=headers).text
        except Exception as a:
            print("Get:",url,"failed!;",)
            continue			#异常处理
            
        ob = re.compile(r'<img class="blur" src="(.*?)"(\s\S*?)')
        html = re.search(ob, req)
        html = html.group()
        html = re.sub('<img class="blur" src="', '', html)
        html = re.sub('"', '', html)
        newurl = re.split( '\s', html)  #清洗出来图片的url
        savePic(newurl[0])

geturl()
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

super_vab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值