Python3爬取网页中图片(2021-01-04 14:06:02),附上完整代码

Python爬取网页中图片,附上完整代码

概述

批量爬取数据,请遵循robots协议及相关网站协议及说明。
本代码仅供有需要爬取网页中图片的人参考,请不要从事违法行为。
本代码测试于:2021-01-04 14:04:14
说明:

  1. 本代码使用的python3.8
  2. 本代码只能爬取静态页面中的图片,即img标签是写到html静态页面里面的,而不是后期通过vue等js框架渲染的(判断是否满足条件:请右键查看代码源文件,看源码内是否存在所需要爬取的img标签src路径)。
  3. 本代码的正则表达式是依据特定的昵图网图片网页写的,爬取其他网页需自行修改
  4. 本代码用到两个外部库requests和os,一个内部库re
  5. 本代码在本人mac book上运行的,请自行改为自己的存储路径,window系统请自行查询路径注意事项
  6. 本代码是在昵图网查询的关键词“美女”,得出的结果
  7. 代码流程:获取页面内容 --> 从内容中用正则获取图片列表 --> 将每个元素作为图片保存到本地

完整代码

import requests
import re
import os
# 存储图片的路径
root = "/Users/ha/Downloads/nipic/"
# 昵图网图片的url
url = 'http://soso.nipic.com/'
# 参数
params = {"q": "美女"}
# 这里直接排除无用的图片,只保留我们需要的图片,这个正则是通过人工查看页面结构看到的
rule = re.compile(r'http://pic\S+?/pic/\d+?/\S+?.jpg')
# 获取页面内容
def getHTMLText(url, params):
    headers = {
        "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"}
    try:
        r = requests.get(url,  timeout=30,  params=params,  headers=headers)
        r.raise_for_status()
        # r.encoding = r.apparent_encoding  通过内容分析编码,比较慢,如果知道了encoding 直接写死就好了
        r.encoding = 'UTF-8'
        print(r.text)
        return r.text
    except:
        return '获取页面失败'

# 从页面内容中解析需要的内容
def parsePage(html, rule):
    try:
        imgs = re.findall(rule,  html)
        return imgs
    except:
        return '解析图片失败'
# 批量获取图片
def getImgs(imgs):
    for img in imgs:
        getImg(img)

# 获取单张图片,并保存到指定路径
def getImg(img):
    def getImg(img):
        name = img.split('/')[-1]
        file = root+name
        print(file)
        if not os.path.exists(file):
            r = requests.get(img)
            with open(file, 'wb') as f:
                f.write(r.content)
                f.close()
                print(name + ' 保存成功')
        else:
            print('文件已存在')
    try:
        if not os.path.exists(root):
            os.mkdir(root)
        getImg(img)
    except:
       print('爬取失败')


def main():
    html = getHTMLText(url, params)
    imgs = parsePage(html, rule)
    print(imgs)
    print('共有 '+str(len(imgs))+' 张图片')
    getImgs(imgs)
main()

如果觉得有用,请点赞收藏让更多人的同行少走弯路,祝所有同行朋友,程序没bug!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值