首页 > 编程语言 >使用python批量爬取wallhaven.cc壁纸站壁纸

使用python批量爬取wallhaven.cc壁纸站壁纸

时间:2022-08-26 17:33:21浏览次数:148  
标签:python wallhaven li headers 地址 html add 壁纸 data

偶然发现https://wallhaven.cc/这个壁纸站的壁纸还不错,尤其是更新比较频繁,用python写个脚本爬取

点latest,按照更新先后排序,获得新地址,发现地址是分页展示的,每一页24张

 

 

 本案例使用xpath爬虫爬取数据,先分析网页,使用浏览器查看元素工具,快速定位到图片元素所在位置,且存在规律性

 

 首先爬取一级页面获取图片页面地址(点了上图箭头的地址会打开图片详细页,并非图片真实地址),xpath提取数据的代码如下

html = requests.get(url=url1, headers=headers, timeout=5.0).text
data = etree.HTML(html)
li_list = data.xpath('.//div[@id="thumbs"]//@href')

执行后爬取出一连串的地址信息

 

 对里面包含“latest”的地址进行剔除,这个地址非图片地址,然后再循环请求图片地址,获取真实图片地址

        for li in li_list:
            if 'latest' in li:
                continue
            else:
                html_li = requests.get(url=li, headers=headers, timeout=5.0).text
                data = etree.HTML(html_li)
                li_add = data.xpath('//*[@id="wallpaper"]//@src')
                li_add = li_add[0]
                print(li_add)

执行后输出真实图片地址

 

 把这些地址写到一个txt文本内,然后通过迅雷去下载,效率会高一些,当然也可以爬取后执行使用python下载,单线程下蛮久的。先上保存到txt内的全部代码

# -*- codeing = utf-8 -*-

import requests
from lxml import etree
import time
import random
import time

def getBZ():

    url='https://wallhaven.cc/latest?page={}'

    # 翻页10页
    for page in range(1, 10):

        headers = {
            # 'referer': 'https://wallhaven.cc/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36',
        }
        print(time.strftime("%H:%M:%S"))

        print("第{}页".format(page))

        url1 = url.format(page)
        print(url1)
        # 一级页面请求
        html = requests.get(url=url1, headers=headers).text
        data = etree.HTML(html)
        li_list = data.xpath('.//div[@id="thumbs"]//@href')
        for li in li_list:
            if 'latest' in li or 'top'in li:
                continue
            else:
                print(li)
                html_li = requests.get(url=li, headers=headers)
                print(html_li.status_code)
                if html_li.status_code == 404 or html_li.status_code == 429:#判断,如果响应失败跳过这次数据抓取
                    continue
                else:
                    data = etree.HTML(html_li.text)
                    li_add = data.xpath('//*[@id="wallpaper"]//@src')
                    li_add = li_add[0]
                    with open('1538.txt', 'a',encoding='utf-8') as w:
                        w.write(li_add+'\n')
                        w.close()
                    b = random.randint(1,2)#随机从1到2内取一个整数值
                    print("等待"+str(b)+"秒")
                    time.sleep(b)#把随机取出的整数值传到等待函数中
getBZ()

 

标签:python,wallhaven,li,headers,地址,html,add,壁纸,data
From: https://www.cnblogs.com/becks/p/16628335.html

相关文章

  • 学习:python 综合训练 超市商品管理系统 数据库版
                 ......
  • python3 函数 定义函数与切片
     如果我们要计算一个圆的面积,就是3.14*r*r,如果每次就算,则每次都要写一遍,就很麻烦,所以有了函数,我们就可以通过调用函数的方法,直接使用就行了。 这里我们可以访问 ......
  • 数据分析大作战,SQL V.S. Python,来看看这些考题你都会吗 ⛵
    ......
  • 在python程序中调用java代码
     Python是一门“胶水”语言,非常灵活多变,但是在一些特殊的时候,也需要调用其它语言来协助实现更多的功能;在公司使用python进行接口测试的时候,会遇到有些接口数据是由公司的......
  • python基本数据类型
    python基本数据类型python基本数据类型有:整型,浮点型,布尔型,复数型,字符串,列表,元组,字典,集合。六大基本数据类型:①.Number(数字)②.String(字符串)③.List(列表)④.Tuple(元组)......
  • python 读取json文件
    一个jason文件实例————fcc.json{"organization":"freeCodeCamp","website":"https://www.freecodecamp.org/","formed":2014,"founder":"QuincyLarson","ce......
  • Linux安装python并配置环境变量
    1.获取python3源码我们访问这个网址,就可以看到全部的python下载方式:【https://www.python.org/downloads/】   本人下载的是3.10.6版本   2.安装Python这......
  • python学习课后练习
    此次爬虫学习的资源是B站所找,具体如下:Python课程天花板,Python入门+Python爬虫+Python数据分析5天项目实操/Python基础,该课程留了课后练习,我把自己的代码和想法单独整成一......
  • python基础——模块 包
    模块包Python模块(Module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。模块能定义函数,类和变量,模块里也能包含可执行的代码。模块和包以及库,......
  • Linux-Centos 用crontab定时运行python脚本详细步骤
    服务器运行定时任务操作步骤:1.编辑crontab配置命令:  crontab-e可进行编辑定时任务  crontab-l查看定时任务列表 crontab-r删除定时任务 servicecro......