项目二:爬取网页图片

项目二:爬取网页图片

标签(空格分隔): 爬虫


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值