文章目录

  • 手把手教你爬某站图片
  • 代码前的准备
  • 代码部分
  • 作者寄语


手把手教你爬某站图片

代码前的准备

演示网址

<a href="https://pic.sogou.com/d?query=%E4%BA%8C%E6%AC%A1%E5%85%83%20%E6%83%85%E4%BE%A3%E5%A4%B4%E5%83%8F%20%E4%B8%80%E5%B7%A6%E4%B8%80%E5%8F%B3"></a>
  • 按下F12键,部分windows系统需要按下 Fn + F12 找到network
你会发现里面是这样的 ,不要紧,F5刷新一下,数据包就出来了

axios爬取图片 爬取图片教程_html


我们点击第一个包


axios爬取图片 爬取图片教程_爬虫_02


找到response 为了看得更加方便,我们点击下面的 {} 将html代码格式化


另外为了方便提取数据 右击空白处,选择在源面板打开


axios爬取图片 爬取图片教程_爬虫_03


接下来按下ctrl + f 搜索img 找图片,通过规律我们发现img-height这个class频繁出现,网页内大概有50个左右,因此我们翻一个网页,这个网页会显示给我们它之后的五十张图片的信息,这为翻页操作的参数打下了基础,我们不妨打开它的类似于网址的部分看看(复制drag-img后的url,复制url的路径) 在新的浏览器粘贴·


axios爬取图片 爬取图片教程_html_04


如果你看到类似于作者的图片 恭喜你成功了


axios爬取图片 爬取图片教程_数据_05


这个时候我们返回Network 找到第一个包的Headers,寻找我们需要的信息


axios爬取图片 爬取图片教程_axios爬取图片_06


url 和 user-agent

axios爬取图片 爬取图片教程_爬虫_07


axios爬取图片 爬取图片教程_爬虫_08

我们回到作者给的这个网址

<a href="https://pic.sogou.com/d?query=%E4%BA%8C%E6%AC%A1%E5%85%83%20%E6%83%85%E4%BE%A3%E5%A4%B4%E5%83%8F%20%E4%B8%80%E5%B7%A6%E4%B8%80%E5%8F%B3"></a>

将图片翻页操作
发现url的变化
翻页前:https://pic.sogou.com/d?query=二次元%20情侣头像%20一左一右&did=1
翻页后:https://pic.sogou.com/d?query=二次元%20情侣头像%20一左一右&did=2
仅仅是did发生变化 因此我们可以模拟翻页操作爬取多张

代码部分

import requests
# 发送请求模块
import os
# 路径转存模块
from lxml import etree
# 使用xpath提取 
import time
# 导入时间模块的目的是为了减缓爬虫速度,避免反爬
class Bizhi():
    src_array = []
    # 这个数组用来存储图片的网页所在,我们将对这里的元素发送请求获取图片
    def __init__(self, id):
        self.id = id
        # id 就是上文提到的did的参数,设置不同的id可以爬的图片数量不同
        self.url = f'https://pic.sogou.com/d?query=%E4%BA%8C%E6%AC%A1%E5%85%83%20%E6%83%85%E4%BE%A3%E5%A4%B4%E5%83%8F%20%E4%B8%80%E5%B7%A6%E4%B8%80%E5%8F%B3&forbidqc=&entityid=&preQuery=&rawQuery=&queryList=&st=&did={id*50}'
        
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'
        }


    def get_res(self):
    # 获取响应
        self.text = requests.get(self.url, headers=self.headers).content.decode()
        html = etree.HTML(self.text)
        # xpath语法提取属性
        src = html.xpath(".//a[@class='img-height']//img/@drag-img")

        for i in src:
        # 所爬到的src的每个元素类似于这种样子
        # '//img01.sogoucdn.com/v2/thumb/crop/xy/ai/w/60/h/60?appid=122&url=https://i02piccdn.sogoucdn.com/c1094bb21f54f2f2'
        # 我们将src每个元素用=将其分割(split方法)开来每个元素就成了这个样子 是一个列表
        # ['//img02.sogoucdn.com/v2/thumb/crop/xy/ai/w/60/h/60?appid', '122&url', 'https://i02piccdn.sogoucdn.com/6293cb571ce30968']
        # 列表的第二个数据就是我们想要的
            self.src_array.append(i.split('=')[2])
    def save_src(self):
    # 保存图片到本地
        flag = 1
        for i in self.src_array:
            with open(f'D:/爬虫用/爬虫3/壁纸图片/bizhi{self.id}-{flag}.jpg', 'wb') as f:
                f.write(requests.get(i, headers=self.headers).content)
                time.sleep(0.5)
            flag += 1
            print(f'bizhi{self.id}-{flag}保存')
    def run(self):
        self.get_res()
        self.save_src()
# 我们以id=1为例,就是五十张 爬到1*50 = 50张图片 
test1 = Bizhi(1)