爬取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')
缩略图网页源码的特点如下
可以看见这里会有一个图片的地址,但是这个地址,是当前页面下缩略图的地址,而真正的地址在于它上面那个href = /desk22418.htm
如果点进第一个图片
可以看见他的地址的后缀就是刚才href属性的值
而真正的图片下载的地址,就在这个原图片地址的源码中
这个地址就是真正的图片所在的地址,而不是缩略图。
抓取完后的样子
注意的问题
- 首先就是图片地址的问题,这个地址不一定在源码中就有完整的地址,要仔细在源码中找一下
- 如果遇见访问网页的一些错误,首先考虑用try试一下,在考虑代理或者数据、网络等问题
- 要注意用库函数的时候,注意其是属性还是方法,要正确的调用。
上一篇: 字符串的最大公因子