项目二:爬取网页图片

来源:互联网 发布:淘宝卖点文案 编辑:程序博客网 时间:2024/06/16 20:10

项目二:爬取网页图片

标签(空格分隔): 爬虫


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 requestsfrom bs4 import BeautifulSoupimport osdef 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:            continuedef 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:            continuedef 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)得到图片文件并通过文件操作写入之前建立好的文件夹里

原创粉丝点击