python爬虫爬取高清原图

先来一张测试结果截图:   

7534626b9b594642a6f630133c19c60c.png

这里使用的是requests和xpath

先安装所需要的requests和lxml包,这个就不多说了

然后开始书写代码,关键的内容在代码中都有注释,这里只是简单介绍流程

由于要爬取的是很多页的,所以设置一个起始页和终止页,对主函数进行循环调用

if __name__ == "__main__":                  #程序主入口  用于输入需要爬取的起始页和终止页
    print("please enter start page and end page:")
    start = int(input("start:"))
    end = int(input("end:"))
    for i in range(start, end + 1):         #循环执行main函数
        main(i)
    print('completed')

然后就是主函数,主要存储一些关键信息(网址、头等等)和调用各个函数

​
def main(i):
    #wallhaven排行榜网址
    url = 'https://wallhaven.cc/toplist?page='+str(i)
    #用于伪装的headers信息
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
    }
    li_list=get_li_list(url,headers)        #调用get_li_list函数用于获取每个缩略图所在的li标签
    for li in li_list:                      #对每个li标签再次进行操作 提取href属性值(即缩略图网址)
        href=li.xpath('./figure/a/@href')[0]
        src=get_src(href,headers)           #在href所在的网址中提取出原图的src地址
        save(src,headers)                   #保存图片

​

模拟浏览器对网页发出请求,获得响应,解析网页并返回tree

def get_etree(url,headers):
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    text = response.text
    tree = etree.HTML(text)
    return tree                                            #返回解析后的tree

提取关键标签和网址(此处用的是xpath,我个人觉得比较方便)

def get_li_list(url,headers):
    tree = get_etree(url,headers)                          #获得解析后的tree
    return tree.xpath('//*[@id="thumbs"]/section/ul/li')   #返回提取出的的li标签

def get_src(href,headers):
    tree = get_etree(href,headers)
    return tree.xpath('/html/body/main/section/div[1]/img/@src')[0]   #提取src

最后就是保存图片,保存位置可随意愿自行修改

def save(src,headers):
    response=requests.get(url=src,headers=headers)
    img=response.content          #图片存储为二进制格式
    name=src.split('-')[1]        #从src中切出独特的图片序列用做图片名称
    path = 'D:\\MyPicture\\WallHaven\\' + name    #存储地址可自行修改
    with open(path, 'wb') as p:
        p.write(img)
    print(name + '爬取成功')

完整代码:

import requests
from lxml import etree
#这里选取的是网站是wallhaven
def get_etree(url,headers):
    response = requests.get(url=url, headers=headers)
    response.encoding = 'utf-8'
    text = response.text
    tree = etree.HTML(text)
    return tree                                            #返回解析后的tree

def get_li_list(url,headers):
    tree = get_etree(url,headers)                          #获得解析后的tree
    return tree.xpath('//*[@id="thumbs"]/section/ul/li')   #返回提取出的的li标签

def get_src(href,headers):
    tree = get_etree(href,headers)
    return tree.xpath('/html/body/main/section/div[1]/img/@src')[0]   #提取src

def save(src,headers):
    response=requests.get(url=src,headers=headers)
    img=response.content          #图片存储为二进制格式
    name=src.split('-')[1]        #从src中切出独特的图片序列用做图片名称
    path = 'D:\\MyPicture\\WallHaven\\' + name    #存储地址可自行修改
    with open(path, 'wb') as p:
        p.write(img)
    print(name + '爬取成功')
'''限制级的图片需要账号信息,比较简单的方式就是添加cookies属性,可自行修改'''
def main(i):
    #wallhaven排行榜网址
    url = 'https://wallhaven.cc/toplist?page='+str(i)
    #用于伪装的headers信息
    headers = {
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.102 Safari/537.36"
    }

    li_list=get_li_list(url,headers)        #调用get_li_list函数用于获取每个缩略图所在的li标签
    for li in li_list:                      #对每个li标签再次进行操作 提取href属性值(即缩略图网址)
        href=li.xpath('./figure/a/@href')[0]
        src=get_src(href,headers)           #在href所在的网址中提取出原图的src地址
        save(src,headers)                   #保存图片

if __name__ == "__main__":                  #程序主入口  用于输入需要爬取的起始页和终止页
    print("please enter start page and end page:")
    start = int(input("start:"))
    end = int(input("end:"))
    for i in range(start, end + 1):         #循环执行main函数
        main(i)
    print('completed')

内容仅供参考

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愈辩已忘言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值