爬虫项目之爬取4K高清壁纸

打印 上一主题 下一主题

主题 1541|帖子 1541|积分 4623

爬虫项目之爬取4K高清壁纸

目标网址:4K壁纸高清图片_电脑桌面手机全面屏壁纸4K超清_高清壁纸4K全屏 - 壁纸汇
利用技能Selenium+Requests
下面是目标网页

思路:由于此网页是通过不停下拉的方式刷新图片,而不是通太过页的方式加载新的图片,所以不能利用requests+xpath技能直接爬取该网页,所以接纳Selenium操纵网页,控制网页下滑获取最新图片。下面让我们来看代码。
第一步:首先设置无头显示,再打开目标网页。
  1. from selenium.webdriver import Edge
  2. from selenium.webdriver.common.by import By
  3. import time
  4. from selenium.webdriver.edge.options import Options
  5. import requests
  6. import os
  7. import shutil
  8. #设置无头显示
  9. opt = Options()
  10. opt.add_argument("--headless")
  11. opt.add_argument("--disable-gpu")
  12. web = Edge(options=opt)
  13. #打开目标网页
  14. url = 'https://www.bizhihui.com/tags/4Kbizhi/'
  15. web.get(url)
  16. time.sleep(1)                #每次操作网页时必须让程序睡眠1秒,否则容易导致网页刷新失败,程序中断报错
复制代码
第二步:通过不停循环不停下拉滚动条获取最新图片数据。
  1. #滚动条设置
  2. for i in range(5):
  3.     web.execute_script('document.documentElement.scrollTop=10000')      #设置滚动条滚到最底下,0是顶部,10000是底部
  4.     time.sleep(2)
复制代码
第三步:通过find_elements(By.TAG_NAME,'li')函数,获取该页面所有的li标签,并且筛选目标li标签,通过get_attribute('src')函数获取img标签的src属性,最后获取到图片的url和name,将它们放进字典img_url_list中。
  1. #获取所有li标签
  2. lis = web.find_elements(By.TAG_NAME,'li')
  3. time.sleep(1)
  4. #通过li标签爬取目标图片的url
  5. img_url_list = {}
  6. for li in lis:
  7.     if li.get_attribute('class')=='item-list masonry-brick':#筛选class=item-list masonry-brick的li标签
  8.         img_src = li.find_element(By.TAG_NAME,'img').get_attribute('src') #获取img标签的src属性
  9.         img_url = img_src[:-9]
  10.         img_name = img_url[-17:]
  11.         img_url_list[img_name]=img_url
复制代码
第四步:通过os模块自带的函数判定文件夹是否存在,假如存在则通过shutil模块的rmtree方法删除,再通过os模块下的makedirs方法创建目录。
  1. #判断文件夹是否存在,如果存在则删除,在创建
  2. if os.path.exists('./img'):
  3.     shutil.rmtree('./img')      #删除文件夹
  4. os.makedirs('./img')      #创建文件夹
复制代码
第五步:循环上面得到的字典,通过requests方法下载图片并保存在新建的img文件夹中
  1. #循环字典下载图片
  2. i=1
  3. for key in img_url_list:
  4.     resp = requests.get(img_url_list[key])
  5.     with open(f'./img/{key}','wb') as f:
  6.         f.write(resp.content)
  7.         print(f"下载{i}张图片。。。")
  8.         i+=1
  9.     f.close()       #关闭文件
  10. #下载完成
  11. print("OVER!")
  12. #结束进程
  13. web.close()
复制代码
通过以上步骤我们就爬取到了网页上的图片了。

下面时程序源码:
  1. from selenium.webdriver import Edgefrom selenium.webdriver.common.by import Byimport timefrom selenium.webdriver.edge.options import Optionsimport requestsimport osimport shutil#设置无头显示opt = Options()opt.add_argument("--headless")opt.add_argument("--disable-gpu")web = Edge(options=opt)# web = Edge()#打开目标网页url = 'https://www.bizhihui.com/tags/4Kbizhi/'web.get(url)time.sleep(1)#滚动条设置
  2. for i in range(5):
  3.     web.execute_script('document.documentElement.scrollTop=10000')      #设置滚动条滚到最底下,0是顶部,10000是底部
  4.     time.sleep(2)#获取所有li标签lis = web.find_elements(By.TAG_NAME,'li')time.sleep(1)#通过li标签爬取目标图片的urlimg_url_list = {}for li in lis:    if li.get_attribute('class')=='item-list masonry-brick': #筛选class=item-list masonry-brick的li标签        img_src = li.find_element(By.TAG_NAME,'img').get_attribute('src') #获取img标签的src属性        img_url = img_src[:-9]        img_name = img_url[-17:]        img_url_list[img_name]=img_url#判断文件夹是否存在,如果存在则删除,在创建
  5. if os.path.exists('./img'):
  6.     shutil.rmtree('./img')      #删除文件夹
  7. os.makedirs('./img')      #创建文件夹#循环字典下载图片
  8. i=1
  9. for key in img_url_list:
  10.     resp = requests.get(img_url_list[key])
  11.     with open(f'./img/{key}','wb') as f:
  12.         f.write(resp.content)
  13.         print(f"下载{i}张图片。。。")
  14.         i+=1
  15.     f.close()       #关闭文件
  16. #下载完成
  17. print("OVER!")
  18. #结束进程
  19. web.close()
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

飞不高

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表