slabber 发表于 2021-8-4 09:33

【wallhaven热门壁纸爬取】初学者习作(内含福利)

本帖最后由 slabber 于 2021-8-4 11:25 编辑

最近研究python爬虫技术,一直觉得wallhaven这个网站的壁纸质量很高,所以尝试爬取了一下,运用比较基础的模块功能,轻喷……



说明:
1、headers根据自己浏览器的信息替换,找到headers方法可以百度如何获取user-agent即可;
2、整个代码只是运用了基础的requests, lxml中的etree模块,用pycharm编写,安装方式可以cmd进入命令符输入pip install XXXX,或者pycharm界面按下ctrl+alt+s进入设置界面然后选择interpreter点击加号安装模块;
3、我只爬取了网站toplist的首页,其他页面自行攻破。


import requests
from lxml import etree
import os

if not os.path.exists('./wallhaven热图'):
    os.mkdir('./wallhaven热图')
if __name__ == "__main__":
    headers = {
      'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'
    }
    url = 'https://wallhaven.cc/toplist'
    page_text = requests.get(url=url,headers=headers).text
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="thumbs"]/section/ul/li')
    for li in li_list:
      detail_url = li.xpath('./figure/a/@href')
      detail_page_text = requests.get(url=detail_url,headers=headers).text
      tree2 = etree.HTML(detail_page_text)
      img_src = tree2.xpath('//*[@id="wallpaper"]/@src')
      img_name = tree2.xpath('//*[@id="wallpaper"]/@src').split('/')[-1]
      img_path = 'wallhaven热图/'+img_name
      img_data = requests.get(url=img_src,headers=headers).content
      with open(img_path,'wb') as fp:
            fp.write(img_data)
            print(img_name,'下载成功!')

下载图片展示:

slabber 发表于 2021-8-4 16:52

升级了一下 可以选择起始页面的…… 一共100多页 可以都一次性爬了 有会异步或者线程池的大佬可以指教一下 怎么更快速的下载!

import requests
from lxml import etree
import os

if __name__ == "__main__":
    headers = {
      'User-Agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Mobile Safari/537.36'
    }
    url = 'https://wallhaven.cc/toplist?page=%d'
    #指定起始页面
    page_start = int(input('输入起始页码:'))
    page_end = int(input('输入结束页码:'))

    if not os.path.exists('./wallhaven热图'):
      os.mkdir('./wallhaven热图')

    for page in range(page_start,page_end+1):
      print('正在下载第%d页图片'%page)
      new_url = format(url % page)
      page_text = requests.get(url=new_url,headers=headers).text

      tree = etree.HTML(page_text)
      li_list = tree.xpath('//*[@id="thumbs"]/section/ul/li')
      for li in li_list:
            detail_url = li.xpath('./figure/a/@href')
            detail_page_text = requests.get(url=detail_url,headers=headers).text
            tree2 = etree.HTML(detail_page_text)
            img_src = tree2.xpath('//*[@id="wallpaper"]/@src')
            img_name = tree2.xpath('//*[@id="wallpaper"]/@src').split('/')[-1]
            img_path = 'wallhaven热图/'+img_name
            img_data = requests.get(url=img_src,headers=headers).content
            with open(img_path,'wb') as fp:
                fp.write(img_data)
                print(img_name,'下载成功!')

slabber 发表于 2021-8-4 16:50

xztyx 发表于 2021-8-4 12:27
求大佬弄个可以登陆可以搜索的撒~~

搜索无意义这个网站 都是英文 我补充了下可以选择起始页码的 一会添加进去

wu2_cgj 发表于 2021-8-4 10:22

什么福利?

QingYi. 发表于 2021-8-4 10:39


       
什么福利

dxx-20131202 发表于 2021-8-4 10:43

啥福利啊 说清楚点啊~
:$qqq

ds1 发表于 2021-8-4 10:45

同求福利{:1_893:}

Dence 发表于 2021-8-4 10:55


啥福利啊 说清楚点啊~

灰灰鼠精灵 发表于 2021-8-4 11:12

福利在哪儿?

slabber 发表于 2021-8-4 11:23

wu2_cgj 发表于 2021-8-4 10:22
什么福利?

下载完你就知道

slabber 发表于 2021-8-4 11:26

wu2_cgj 发表于 2021-8-4 10:22
什么福利?

就是下载的图片……

slabber 发表于 2021-8-4 11:28

灰灰鼠精灵 发表于 2021-8-4 11:12
福利在哪儿?

重新上传了附件……
页: [1] 2
查看完整版本: 【wallhaven热门壁纸爬取】初学者习作(内含福利)