1.9 案例一

课前说明:本章节请求的 url 部分用 ** 代替

本章节需要掌握的知识点:

request.urlretrieve()  # urlretrieve函数是用来下载资源的函数,第一个参数是请求的 url,第二个参数是要保存的文件名

爬虫分三个模块:

       1、请求模块:用于构造请求体,并将请求到的网页(数据)返回给解析模块;

       2、解析模块:用于提取数据(本章节用正则提取网页中的数据),并返回数据给存储模块

       3、存储模块:用于存储数据

案例简介:

       用于抓取网页 https://www.qiushibai**.com/pic/page/ 中的图片,根据用户需求,抓取网页中的图片并下载到本地。

from urllib import request
import re
from time import sleep


# 【请求模块】
def handle_request(url, page):
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
    }
    page_url = url + str(page)
    return request.Request(headers=headers, url=page_url)


def request_data(url, start, end):
    '''
    返回请求到的页面
    :param url: 请求URL
    :param start: 请求开始页
    :param end: 请求结束页
    :return:
    '''
    for page in range(start, end + 1):
        req = handle_request(url, page)
        res = request.urlopen(req)
        sleep(2)
        yield res.read().decode('utf-8')


# 【解析模块】
def analysis_html(html_list):
    '''
    解析网页
    :param html_list: 请求到的网页列表
    :return: 返回图片的url列表
    '''
    for html in html_list:
        # 用正则从HTML 字符串中匹配出所有的糗事图的url
        pat = re.compile(r'<div class="thumb".+?<img src="(.*?)"', re.S)
        res = pat.findall(html, re.S)
        # 遍历
        for url in res:
            yield 'http:' + url


# 【存储模块】
def save(data):
    for url in data:
        # 保存在 qiu 文件中
        name = './qiu/' + url.split('/')[-1]
        # 下载图片
        request.urlretrieve(url=url, filename=name)
        sleep(1)
        print('正在下载:', url)


def main():
    url = 'https://www.qiushibai**.com/pic/page/'
    start = int(input('请输入起始页:'))
    end = int(input('请输入终止页:'))
    # 请求
    html_list = request_data(url, start, end)
    # 解析
    data = analysis_html(html_list)
    # 存储
    save(data)


if __name__ == '__main__':
    main()

温馨提示:好了,本案例就到此结束,记得动手敲一敲哦n(*≧▽≦*)n!不记得正则的同学可以复习一下 1.7 认识网页解析工具哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值