欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬取LOL壁纸图片

程序员文章站 2022-04-30 18:27:53
...

爬取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')

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

爬取LOL壁纸图片

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


爬取LOL壁纸图片

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


而真正的图片下载的地址,就在这个原图片地址的源码中
爬取LOL壁纸图片

这个地址就是真正的图片所在的地址,而不是缩略图。
抓取完后的样子
爬取LOL壁纸图片

注意的问题

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