爬取LOL壁纸图片

爬取LOL壁纸图片

import ipcapture
import time
import os
import requests
from bs4 import BeautifulSoup

#url是需要抓取网站的地址,这里随便选择了一处地址
url = 'http://www.netbian.com/s/lol/index_4.htm'
#这里的website是后面组拼源地址的前缀
website = 'http://www.netbian.com'
#加了一个访问的头部信息
head = {
    
    'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36'}
#开始访问图片的地址,并且根据网页源码的前部分可以看出其编码是GBK
res = requests.get(url)
res.encoding = 'GBK'

#开始解析
tag = BeautifulSoup(res.text,'html.parser')
#将标签为div并且属性class为list的标签提取出来(因为这里find_all是
#返回一个符合条件的列表标签集合,并且在文章中可以看到这个标签只有一个,
#因此要用divtag[0]来访问
divtag = tag.find_all('div',attrs = {
    
    "class":"list"})
#在这里抓取各个图的终地址
#每个缩略图都是由a标签来包裹,并且在其中包含有原图的部分地址,下列程序正式提取这部分的地址
atag = divtag[0].find_all('a')
#创建LOL壁纸这个文件夹用于存放数据
try:
    os.mkdir('LOL壁纸')
except:
    print('LOL壁纸文件夹已创建')
os.chdir('LOL壁纸')
#开始在atag列表中使用其包含原图的部分地址,部分地址处于属性href中
for atag_son in atag:
#     使用try来增加程序面对访问错误的能力,提高健壮性
    try:
#        将原图片地址进行组合
        newpage = requests.get(website + atag_son['href'], headers = head)
        将完整的地址打印出来
        print(website + atag_son['href'])
        newpage.encoding = 'GBK'
#        解析数据
        newtag = BeautifulSoup(newpage.text,'html.parser')
    #   print(newpage.text)
#        将源图片地址中下载图片的地址进行提取
        pictag = newtag.find('div',attrs={
    
    "class":"pic"}).img
#        print(pictag)
        imgbin = requests.get(pictag['src'], headers = head)
#        以二进制写打开文件,并且文件命名为alt属性的值(其值就是网站图片下面的名字)
        with open(pictag['alt'].replace('/','') +'.jpg','w+b') as f:
#            写入图片
            f.write(imgbin.content)
        print(pictag['src'],end='')
        print(pictag['alt'])
        time.sleep(1)
    except:
        如果有错误,打印错误
        ('error')

缩略图网页源码的特点如下

在这里插入图片描述

可以看见这里会有一个图片的地址,但是这个地址,是当前页面下缩略图的地址,而真正的地址在于它上面那个href = /desk22418.htm如果点进第一个图片


在这里插入图片描述

可以看见他的地址的后缀就是刚才href属性的值


而真正的图片下载的地址,就在这个原图片地址的源码中
在这里插入图片描述

这个地址就是真正的图片所在的地址,而不是缩略图。
抓取完后的样子
在这里插入图片描述

注意的问题

  1. 首先就是图片地址的问题,这个地址不一定在源码中就有完整的地址,要仔细在源码中找一下
  2. 如果遇见访问网页的一些错误,首先考虑用try试一下,在考虑代理或者数据、网络等问题
  3. 要注意用库函数的时候,注意其是属性还是方法,要正确的调用。

猜你喜欢

转载自blog.csdn.net/qq_37429313/article/details/108306944
今日推荐