注:仅供学习使用
一、进入网址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)