Python爬取页面多张图片案例

逻辑 

  1. 导入reosrequests模块,用于正则表达式匹配、文件操作和发送HTTP请求。
  2. 定义了getHtmlContent(url)函数,通过发送GET请求获取指定URL的网页HTML内容,并返回响应的HTML内容。
  3. 定义了getJPG(html)函数,使用正则表达式从HTML内容中解析出所有jpg图片的URL,并返回一个URL列表。
  4. 定义了batchDownloadJPGs(imgUrls, root='./newPhoto/')函数,用于批量下载图片。遍历图片URL列表,下载图片并保存到指定目录下。
  5. 定义了download(url)函数,调用getHtmlContent()函数获取网页HTML内容,然后调用getJPG()函数解析出所有jpg图片的URL列表,最后调用batchDownloadJPGs()函数进行批量下载图片。
  6. 定义了main()函数,设置要下载的网页URL为百度贴吧某个帖子的URL,并调用download()函数进行下载。
  7. 使用if __name__ == '__main__':条件语句判断当前脚本是否被直接执行,如果是,则调用main()函数执行程序。

代码 

import re  # 导入re模块,用于正则表达式匹配
import os  # 导入os模块,用于文件操作
import requests  # 导入requests库,用于发送HTTP请求

# 根据URL获取网页HTML内容
def getHtmlContent(url):
    headers = {  # 设置请求头信息,模拟浏览器访问,防止图片下载为0
        'Cookie': '...',
        'User-Agent': '...'
    }
    page = requests.get(url, headers=headers)  # 发起GET请求并获取响应
    return page.text  # 返回响应的HTML内容

# 从html中解析出所有的jpg图片的url
def getJPG(html):
    jpgReg = re.compile(r'<img.+?src="(.+?\.jpg)" width')  # 使用正则表达式匹配jpg图片的url
    jpgs = re.findall(jpgReg, html)  # 解析出JPG的url列表
    print('获取图片链接数为: ', len(jpgs))
    return jpgs

# 批量下载图片,默认保存到指定目录下
def batchDownloadJPGs(imgUrls, root='./newPhoto/'):
    # 如果文件夹不存在,自动创建
    if not os.path.exists(root):
        os.mkdir(root)
    count = 1  # 用于给图片计数
    for url in imgUrls:
        path = root + str(count) + '.' + url.split('.')[-1]  # 取文件后缀名并且拼接
        with open(path, 'wb') as file:
            response = requests.get(url)  # 发起GET请求下载图片
            file.write(response.content)  # 将请求返回的二进制内容写入文件
            print(f'正在下载保存第{count}张图片')
            count += 1

def download(url):
    html = getHtmlContent(url)  # 获取网页HTML内容
    jpgs = getJPG(html)  # 解析出所有jpg图片的url列表
    batchDownloadJPGs(jpgs)  # 批量下载图片

def main():    #定义主函数,设置要下载的网页URL,并调用下载函数。
    url = 'https://tieba.baidu.com/p/2256306796?pn=2'
    download(url)

if __name__ == '__main__':    #判断当前脚本是否被直接执行。
    main()

上述代码涉及以下几个知识点

  1. 正则表达式匹配:使用re模块中的re.compile()re.findall()函数,通过正则表达式匹配HTML内容中的jpg图片URL。re.compile()用于编译正则表达式,re.findall()用于在字符串中查找所有匹配的子串并返回列表。
  2. 文件操作:使用os模块中的os.mkdir()函数创建目录,用于保存下载的图片。os.mkdir()用于创建指定名称的目录。
  3. 发送HTTP请求:使用requests库发送GET请求,获取网页的HTML内容和图片的二进制数据。通过requests.get()方法发送GET请求,并携带请求头信息进行模拟浏览器访问。
  4. 批量下载图片:通过循环遍历图片URL列表,使用requests.get()方法发送GET请求下载图片的二进制数据,并将数据写入文件。其中使用with open()语句打开文件,以二进制写入模式写入文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值