使用requests库爬取图片

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

使用requests库爬取图片

爬虫流程

​ 找到目标数据

​ 分析请求流程

​ 构造http请求

​ 提取数据

​ 数据持久化

抓取首页图片(静态)

1.目标数据是图片,导入头文件

import re#正则头文件
import os#系统操作头文件
import requests#请求方法头文件

2.请求流程 (爬取一张图片)

1.先访问图片数据URL

url = "pic.netbian.com/uploads/allimg/190824/212516-1566653116f355.jpg"

2.对URL发起请求,获取图片数据

res = requests.get(url)
#res只包含图片的数据(只有纯粹的图片数据我们才能存储)

3.存储

with open("图片.jpg","wb")as f:
    f.write(res.content)#二进制数据用content,字符串数据用text

3.构造请求

​ 这里是爬取多张图片,爬取的是彼岸图网

1.访问网站,这里不是图片URL
url1 = "https://pic.netbian.com/4kdongman/"
2.构造请求头,不添加headers就相当于没伪装,直接拿数据库的身份去请求,头都给你锤烂,一般情况下添加user-agent就行了,去浏览器上随便找一个请求头就行
headers = {"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}
如果光添加user-agent不行,就把所有的东西都添加上,这里有一个方法快速添加:

1.先创建一个py文件,把请求头的所有东西放进去

2.按Ctrl加r,并勾选正则(Reget)选项
在这里插入图片描述

3.在正则上面输入 (.星号?): (.*) 在正则下方输入 “$1”:"$2", 如下图

在这里插入图片描述

4.把最后的逗号去掉,有双引号的把外面的双引号改成单引号,然后复制粘贴,赋值给headers就行了

headers = {"authority":"pic.netbian.com",
"method":"GET",
"path":"/e/public/onclick/?enews=doclass&classid=66",
"scheme":"https",
"accept":"*/*",
"accept-encoding":"gzip, deflate, br",
"accept-language":"zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7",
"cookie":"__yjs_duid=1_bb4e5b3e36df913449a941ab3ef9b7f21616416167800; td_cookie=3415294076; Hm_lvt_14b14198b6e26157b7eba06b390ab763=1616416167,1616594495,1616675331; zkhanecookieclassrecord=%2C66%2C; Hm_lpvt_14b14198b6e26157b7eba06b390ab763=1616744524; Hm_lvt_526caf4e20c21f06a4e9209712d6a20e=1616743709,1616743724,1616744292,1616746629; yjs_js_security_passport=d65e6df791957b8f0afc196f81328d49385425fe_1616747230_js; Hm_lpvt_526caf4e20c21f06a4e9209712d6a20e=1616747227",
"referer":"https://pic.netbian.com/4kdongman/",
"sec-ch-ua":'"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"',
"sec-ch-ua-mobile":"?0",
"sec-fetch-dest":"script",
"sec-fetch-mode":"no-cors",
"sec-fetch-site":"same-origin",
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"
}
3.请求网页资源
res = requests.get(url1,headers = headers)
4.提取数据

找到规律为img src="/uploads/allimg/190824/212516-1566653116f355.jpg",图片的资源都在引号里面

urls = re.findall('img src="(.*?)"',res.text)

​ 这里得到的是一个含有图片URL的列表

5保存文件

这里由于彼岸网站做了一些防护,删除掉了前面的一些部分,所以我们加上去

for index,img_url in enumerate(urls):
    if not os.path.exits(r"C:\Users\Administrator\Pictures\Saved Pictures")
    	os.mkdir#这里可有可无,是用来创建文件夹的
   	if index+2 < len(urls):
        img_url = "https://pic.netbian.com" + img_url
        res1 = requests.get(img_url)
        #res1这里包含了图片的数据,从第一种方法里面可以看到
        filename = ="精美图片" + str(index) +".jpg"
        #绝对路径也可以,filename = r"C:\Users\Administrator\Pictures\Saved Pictures\精美图片" + str(index) + ".jpg",这样就放到了本机的图库里面了!
        with open(filename,"wb") as f:
            f.write(res1.content)#二进制数据,保存照片
    else:
        break
        #这里用if语句是因为最后两张不是我们要的图片

抓取多页图片(动态)

1.找page页规律

进入控制台页面,然后如果是翻页的,就找其network下的xhr下数据的URL(如果是舔砖页面的,就直接看其网址),对比不同的网址,找出他们的共同点和不同点

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8036645785004681943&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%A3%81%E7%BA%B8&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=0&ic=0&hd=0&latest=0&copyright=0&word=%E5%A3%81%E7%BA%B8&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=wallpaper&pn=30&rn=30&gsm=1e&1616804888277=

https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8036645785004681943&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%A3%81%E7%BA%B8&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=0&ic=0&hd=0&latest=0&copyright=0&word=%E5%A3%81%E7%BA%B8&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=wallpaper&pn=60&rn=30&gsm=3c&1616804888437

例如这两段,可以明显看出他们的pn选项是等差数列,最后一项不重要

2.构造page页
for i in range(1,4)
	page_url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=8036645785004681943&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E5%A3%81%E7%BA%B8&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=0&ic=0&hd=0&latest=0&copyright=0&word=%E5%A3%81%E7%BA%B8&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&force=&cg=wallpaper&pn={}&rn=30&gsm=3c&1616804888437"
	num = i*30
    page_url = page_url.format(num)
3.爬取数据并保存

接着上面的for语句下,将爬取多张图片的方法包装成函数,运用起来就可以了(记得要修改一下名称,不然那会覆盖文件)

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值