• Python爬取wallhaven的所有4k壁纸图片


    目录

    一、前端结构

    二、代码 


    一、前端结构

    get请求,携带参数如下:

    随page参数变化网页变化 

     

     

    需要在整张页面中进入:

    //section[@class="thumb-listing-page"]//li/figure/a/@href

     

     

     进入后获取图片src:

    //section[@class="fit"]/div[@class="scrollbox"]/img/@src

     

    共92页 

    二、代码 

    1. #爬取wallhaven 4k类的所有图片
    2. import requests
    3. import chardet
    4. from lxml import etree
    5. url='https://wallhaven.cc/search?'
    6. headers={
    7. 'User-Agent':
    8. 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.47'
    9. }
    10. total_img_url_list=[]
    11. for pageNum in range(1,3):#爬取两页作为示例
    12. params={
    13. 'q': 'id:65348',
    14. 'sorting': 'random',
    15. 'ref': 'fp',
    16. 'seed': 'dHtqFi',
    17. 'page': pageNum,
    18. }
    19. resp=requests.get(url=url,headers=headers,params=params)
    20. encoding=chardet.detect(resp.content)['encoding']
    21. #print(encoding)
    22. resp.encoding=encoding
    23. page_text1=resp.text
    24. tree1=etree.HTML(page_text1)
    25. img_url_list=tree1.xpath('//section[@class="thumb-listing-page"]//li/figure/a/@href')
    26. total_img_url_list+=img_url_list
    27. #print(src_list)
    28. for img_src_url in total_img_url_list:
    29. resp=requests.get(url=img_src_url,headers=headers)
    30. encoding=chardet.detect(resp.content)['encoding']
    31. resp.encoding=encoding
    32. page_text2=resp.text
    33. tree2=etree.HTML(page_text2)
    34. img_url=tree2.xpath('//section[@class="fit"]/div[@class="scrollbox"]/img/@src')
    35. img_name = img_url[0].split('/')[-1]
    36. with open (
    37. 'D:\\Programming\\Microsoft VS Code Data\\WebCrawler\\data\\img_wallhaven\\'+img_name,
    38. 'wb'
    39. ) as fp:
    40. img=requests.get(url=img_url[0],headers=headers)
    41. fp.write(img.content)
    42. print(img_url,'爬取成功!')
    43. print('爬取结束!!!')

     

     

    可加快爬取速度的方式:

    1. 使用多线程或异步请求:可以考虑使用多线程或异步请求库,如concurrent.futuresasyncioaiohttp等,同时发送多个请求,从而加快爬取速度。

    2. 并行下载图片:可以考虑将图片下载的部分放入异步任务中,实现并行下载多张图片,提高下载速度。

     但是还不会

     

  • 相关阅读:
    用户运营中,培养种子用户的三种模式
    C++:容器list的介绍及使用
    TPM零知识学习五 —— tpm2-abrmd源码安装
    数据结构与算法
    尚硅谷kubernates学习笔记 1
    剑指offer 18. 正则表达式匹配
    Hadoop HA搭建
    C++>> 继承
    ES6:数值的扩展
    用Python订正数据
  • 原文地址:https://blog.csdn.net/naozibuok/article/details/133613498