Python爬虫爬取彼岸图网高清壁纸
程序员文章站
2022-03-27 20:41:34
学习了爬虫之后就迫不及待自己写了个爬虫,作用是爬取彼岸图1080p壁纸。因为是刚入门代码可能会比较乱而且一些我中途遇到的一些问题都是通过最简单的方式去解决的,所以代码行数也比较多,望见谅。下载部分如下from urllib.request import urlretrievefrom bs4 import BeautifulSoupimport osimport requestsfrom urllib.error import HTTPErrorfrom urllib.error import...
学习了爬虫之后就迫不及待自己写了个爬虫,作用是爬取彼岸图1080p壁纸。因为是刚入门代码可能会比较乱,而且我中途遇到的一些问题都是通过最简单的方式去解决的,所以代码行数也比较多,望见谅。
下载部分如下
from urllib.request import urlretrieve
from bs4 import BeautifulSoup import os import requests
from urllib.error import HTTPError
from urllib.error import URLError
url="http://www.netbian.com/" tempList=[] #避开URL错误
def get_page_(imageLink,fileName): try: urlretrieve(imageLink, filename=fileName) except URLError as e: return None
#解析网页
def openhtml(label,attrs,end,url,sortUrl,urlList,): html = url + sortUrl + end
page = requests.get(html) bso = BeautifulSoup(page.content, "html.parser") #找到要获取的标签 for item in bso.findAll(label): if attrs in item.attrs: urlList.append(item.attrs[attrs]) #获取图片链接,并创建文件夹
def downimage(imageUrl,imageName,filepath): try: for index in range(0, len(imageUrl)): #去掉图片链接中.htm方便自定义链接
imageUrl[index] = imageUrl[index].replace(".htm", "") #获取图片名称 openhtml("img", "title", f"{imageUrl[index]}.htm", url=url, sortUrl="", urlList=imageName) #拼接链接
image = requests.get(url + imageUrl[index] + "-1920x1080.htm") #解析图片链接获取.JPG链接
page = BeautifulSoup(image.content, "html.parser") imageLink=(page.find("td").find("img").get("src")) #拼接下载时保存的文件名
fileName="{}{}{}".format(filepath,imageName[index],".jpg") #下载到本地 get_page_(imageLink=imageLink, fileName=fileName) print(imageName[index]) except: print("图片异常,爬取失败") #主体函数,整体流程在这
def wallpaperDown(sortname,sorturl,page,type): #新建保存到本地的文件夹
filepath = f"E:\\1080p壁纸\\{sortname}\\" if not os.path.exists(filepath): os.makedirs(filepath) urlList=[] #打开壁纸分类地址 openhtml("a","href",".htm",urlList=urlList,url=url,sortUrl=sorturl) #筛选出需要网页的连接
urlList=[list for list in urlList if list is not None and f"{sorturl}" in list ] linkLength=len(sorturl) #获取网站页数用于循环 if urlList==[]: end="" else: end = urlList[-2][2+linkLength:-4] #循环N页,获取下载链接 for i in range(page,int(end)+1): # 下载第一页,上面的循环只能从第二页开始下载。 if i>=int(end): print("正在下载第1页") homeImageUrl = [] homeImageName = [] #打开第一页 openhtml("a", "href", ".htm", url=url, sortUrl=sorturl, urlList=homeImageUrl) #筛选出图片链接
homeImageUrl=[list for list in homeImageUrl if list is not None and "/desk/" in list] #下载图片 downimage(imageUrl=homeImageUrl, imageName=homeImageName, filepath=filepath) #判断下载类型,单类别下载则下载完尾页之后结束,多类别则继续下载其他类别 if i >= int(end): if type==0: print(f"正在下载第{i}页",i,end) print(f"{sortname}壁纸已下载完毕") exit() else: print(f"正在下载第{i}页") imageUrl = [] imageName = [] # 找到包含下载链接的标签,并获取内容 openhtml("a", "href", f"_{i}.htm", url=url, sortUrl=sorturl, urlList=imageUrl) # 筛选出需要的图片链接
imageUrl = [list for list in imageUrl if list is not None and "/desk/" in list] # 下载图片 downimage(imageUrl=imageUrl, imageName=imageName, filepath=filepath)
交互如下
import pic_1080p import sys
#分类名称列表
sortlist=['动漫','游戏','日历', '风景', '美女', '影视', '唯美', '设计', '可爱', '汽车', '花卉', '动物', '节日', '人物', '美食', '水果', '建筑', '体育', '军事', '非主流', '其他', "王者荣耀","护眼","LOL"] print(len(sortlist)) #子链接列表,对应分类列表
childlist=['dongman/index','youxi/index','rili/index', 'fengjing/index', 'meinv/index', 'yingshi/index', 'weimei/index', 'sheji/index', 'keai/index', 'qiche/index', 'huahui/index', 'dongwu/index', 'jieri/index', 'renwu/index', 'meishi/index', 'shuiguo/index', 'jianzhu/index', 'tiyu/index', 'junshi/index', 'feizhuliu/index', 'qita/index', "s/wangzherongyao/index","s/huyan/index","s/lol/index"] #选择具体分类
def get(No,Type): childLink = childlist[No] pic_1080p.wallpaperDown(sortlist[No], childLink, page,Type) #输出所有分类 for i in range(0,len(sortlist)): print(f"选择《{sortlist[i]}》请输入【{i}】") #输入选择的分类和起始页
sort=int(input("请输入数字选择要下载分类,输入【10086】将下载所有:")) if sort == 10086: sort_=int(input("请输入将从那个分类开始依次下载:")) page=int(input("请输入起始下载页:")) #判断输入内容 for i in range(0, len(sortlist)): for item in sortlist: # 下载所有分类图片 if sort == 10086: for j in range(sort_, len(sortlist)): folderName = sortlist[j] childLink = childlist[j] get(j,1) # 下载选中的分类
elif sort >= 0 and sort <= 24: get(sort,0) else: print("请按提示输入!") sys.exit()
我测试下载了7G没出现什么问题
本文地址:https://blog.csdn.net/BlueQo/article/details/109049107