栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

如何用python批量爬取网站图片

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何用python批量爬取网站图片

一、简介

       爬取网站图片是一件很简单的事情,用python写一个爬虫很轻松就能实现,原理上很简单,现在的网络基本都是客户端-服务器模式,我们所用的浏览器就是客户端,用浏览器向网站服务器发送请求,网站服务器收到请求后,就会返回图片数据,从而实现爬取功能,要点就在于要找到图片的地址,只有通过唯一的地址才可以发送请求,就好像寄快递一样,只有知道对方的地址才能将信寄出去,所以关键点就在于从网页原代码中分离出图片的地址,然后发送请求,最后将获取到的二级制数据保存下来,废话少说,上代码(以爬取大图网美女图片为例,没有的库需要 pip install 一下)(爬一爬免费数据即可,收费的尽量不要去爬哦,处理不好容易“刑”!!!!)

二、代码实现
# __author__: Mybook
# __date__: 2022/6/5
import requests                  #导入网络请求模块,向服务器发送数据请求用
import time,re,os                 #导入自带模块,代码中再介绍
from bs4 import BeautifulSoup
for i in range(5680,5780):          
    try:
        url = f'http://124.223.19.18/datu/{i}.html'      #这里的5680,5780 分析每一张网页会发现只有后面四位数在变化
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36',
            'Referer': f'{url}'
        }    #加入headers请求头,用来将python代码伪装成浏览器,是一项反爬措施
        response = requests.get(url,headers=headers)    #每一个循环中,发送请求获取网页内容
        html = response.text           #html就是解析出的网页源代码,其中包含图片地址
        urls = re.findall('
',html) #用正则表达式在网页原代码中匹配出图片地址(其中的src的值),urls为列表数据类型 print(urls) # names = re.findall('
',html) #同样的方法可匹配出每一张图片的名字 if urls != [] : soup = BeautifulSoup(html, 'lxml') #介绍另一种方法,用beautiful soup模块解析出每张网页图片的主题名称,用来建立文件夹来存储该网页上的图片 ,也可用正则表达式匹配出,这里只是为了多介绍一种方法,读者可以自行选择 pathname = soup.select(f'#post-{i} > div:nth-child(1) > div > header > h1')[0].text #“#post-{i} > div:nth-child(1) > div > header > h1”在网页图片上右键单击检查,然后在出现高亮的地方右键复制selector再粘贴过来即可 print(pathname) path = f'D:\Practice\图片爬虫\美女图片\{pathname}\' #指定存储路径 if not os.path.exists(path): #用到os 模块,如果路劲不存在就创建,避免每个文件夹都要手动创建 os.makedirs(path) j = 0 for url1 in urls: with open(path + str(j) + '.jpg', "wb") as f: #遍历获取到的图片地址列表,并发送数据请求,将返回到的数据以二进制数据形式存储下来即可,此处可指定文件后缀,可以是jpg,也可以是其他格式,计算机会自动识别 resp = requests.get(url1,headers=headers) f.write(resp.content) j+=1 print(f"正在下载第{j}张图片") time.sleep(0.5) #每爬完一张图片就睡眠0.5秒,反爬措施,如果不加,以来会加重目标网站负担,二来会被网站识别爬虫,导致封IP号 else: pass except: pass

三、结果演示

四、总结

       解释的很清楚了吧,虽然很简单,但是还是要有一些基本功的,没有基本功很难理解以上代码,建议初学者好好学学以上用到的几个模块,用起来会轻车熟路,但是照猫画虎也不是不可,毕竟这是python的优点之一。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/969211.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号