项目二:爬取网页图片
标签(空格分隔): 爬虫
1. 项目需求分析
要爬取图片所在网页url = 'http://www.99rblc.com/ozgq/6/i.htm'
1.1 查找相应标签得到图片所在链接及其名字后,跳转新的图片所在链接,并按照图片名字建立相应文件夹
1.2 跳转至新的链接,查找标签得到该图片文件所在的链接,爬取下来存入建立的文件夹中
1.3 重复上述步骤遍历所有图片
2. 项目功能分析
2.1 爬取图片list所在页面之后用BeautifulSoup()
进行煲汤,查看网页源代码可知图片文件名字、图片文件链接等信息,这些信息保存在a
标签中,通过语句title = soup.find_all('a',attrs={'class':'title'})
可以得到本页面所有图片的list,分别抽取出图片文件夹名称和图片文件所在链接
2.2 图片文件夹名称通过title[i].string
得到,所在链接通过title[1].attrs['href']
得到
2.3 跳转到图片文件的链接后,通过查看网页源代码可知,图片文件保存在img
标签中
3. 代码功能分析
先在这里贴出全部代码(面向过程方法):
import requests
from bs4 import BeautifulSoup
import os
def getHTMLText(url):
try:
r = requests.get(url)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return ""
def getPicList(pic_path, pic_list_url ,pic_url_list):
# 列表pic_path存放图片文件名称,用于建立文件夹
html = getHTMLText(pic_list_url)
soup = BeautifulSoup(html, 'html.parser')
# 抽取出包含图片文件名称以及图片文件链接的标签
title = soup.find_all('a', attrs={'class':'title'})
for t in title:
try:
path = "D://pics//" + t.string + "//"
pic_info_url = 'http://www.99rblc.com' + t.attrs['href']
pic_path.append(path)
pic_url_list.append(pic_info_url)
except:
continue
def getPicInfo(pic_path, pic_url_list):
for i in range(len(pic_path)):
if not os.path.exists(pic_path[i]):
os.makedirs(pic_path[i])
html = getHTMLText(pic_url_list[i])
try:
if html == "":
continue
soup = BeautifulSoup(html, 'html.parser')
imgs = soup.find_all('img')
for img in imgs:
pic_info_url = img.attrs['data-original']
filename = pic_path[i] + pic_info_url.split('/')[-1]
r = requests.get(pic_info_url)
with open(filename,'wb') as f:
f.write(r.content)
f.close()
print('已保存 ' + pic_path[i].split('//')[-2])
except:
continue
def main():
# 遍历深度
depth = 3
for i in range(depth):
pic_list_url = 'http://www.99rblc.com/ozgq/6/' + str(i+1) + '.htm'
pic_path = []
pic_url_list = []
getPicList(pic_path, pic_list_url, pic_url_list)
getPicInfo(pic_path, pic_url_list)
main()
3.1 getPicList(pic_path, pic_list_url ,pic_url_list)
函数分析
title
标签保存有组图文件的名称以及组图所在的链接,提取出组图名称后保存在列表pic_path
里,提取出组图所在链接后保存在列表pic_url_list
中
3.2 getPicInfo(pic_path, pic_url_list)
函数分析
函数参数为组图名称列表pic_path
和组图所在链接列表pic_url_list
,在爬取正确无误的前提下,一套组图会对应有一个组图所在链接,所以这两个列表的元素个数应该相同
首先根据组图名称建立相应的文件夹,爬取得到的相应组图图片就保存在该文件夹里。然后对组图所在链接解析煲汤,通过查看源代码可以发现图片全部保存在img
标签里,那可以通过soup.find_all('img')
语句得到所有的标签,还是查看源代码可知图片文件的统一资源定位符pic_info_url
保存在img
标签的data-original
属性里,那么可以通过语句r = requests.get(pic_info_url)
得到图片文件并通过文件操作写入之前建立好的文件夹里