Python+requests 批量爬取网页图片超详细案例

注:仅供学习使用

一、进入网址https://colorhub.me/

由于我们在爬取网页的时候需要写入头部文件模拟浏览器,所以需要找到头部文件中的user-agent

(1)、找到user-agent

点击F12,进入开发者模式,找到network里面的colorhub.me,接着往下滑找到user-agent,将对应的值复制出来
在这里插入图片描述

(2)、访问网址,获取HTML文本

import requests
from lxml import etree

header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
req = requests.get(url='https://colorhub.me/',headers=header)
#req.encoding=req.apparent_encoding
Html = etree.HTML(req.text)  #然后把爬取下来的html变为lxml类型
#print(req.text)

其中etree是将爬取下来的HTML文本变成lxml类型,在pycharm导入etree模块的时候如果出现错误,可以尝试分两步

from lxml import html
etree=html.etree

通过上面既可以获得整个页面的HTML文本,接下来如果需要获取图片,只需要在HTML文本中找到对应的图片链接既可以下载了。

二、获取图片链接批量下载

以首页图片为例

(1)、通过xpath找到图片链接

首先点击下面图片中的1,然后鼠标点到2那张图片上就可以找到这张图片对应的代码了,在对应的代码里面可以看到图片对应的路径是什么,由于a标签都是在一个class为card的div下面的,所以这里可以通过xpath路径获取到对应的图片链接
在这里插入图片描述
通过xpath"//div[@class=‘card’]//img/@src"可以获取图片下面的链接,通过xpath"//div[@class=‘card’]//a/@title"可以获得div下面对应的标题

首先先创建两个空的列表,将所有链接和标题,分别存放到这两个列表里面

arr=[]
arr2=[]
arr2=Html.xpath("//div[@class='card']//img/@src")  #将图片链接存放到arr2里面
arr=Html.xpath("//div[@class='card']//a/@title")

(2)、遍历所有图片及下载图片

通过for循环遍历所有的链接和文字

在查看标题链接的时候可以看到前面是缺少了https:的,所以在访问这个链接的时候得先给他加上
在这里插入图片描述


for i in range(len(arr2)):
    pic = 'https:'+arr2[i]  #加上https:
    with open(arr[i]+'.jpg','wb') as imgs:  #将图片写进图片文件
        pic2=requests.get(pic).content  #获取图片链接的二进制
        imgs.write(pic2)  #把图片的二进制写进图片文件

完成上面就可以实现批量下载图片了。

三、完整代码

import requests
from lxml import html
etree=html.etree

header = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
req = requests.get(url='https://colorhub.me/',headers=header)
req.encoding=req.apparent_encoding
Html = etree.HTML(req.text)
#print(req.text)

arr=[]
arr2=[]

arr2=Html.xpath("//div[@class='card']//img/@src")
arr=Html.xpath("//div[@class='card']//a/@title")

for i in range(len(arr2)):
    pic = 'https:'+arr2[i]
    with open(arr[i]+'.jpg','wb') as imgs:
        pic2=requests.get(pic).content
        imgs.write(pic2)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值