#废话不多,直接上手

# -*- coding: utf-8 -*-
import urllib.request  # url request
import re  # regular expression
import os  # dirs
import time

'''
url 下载网址
pattern 正则化的匹配关键词
Directory 下载目录
'''


def BatchDownload(url, pattern, Directory):
    # 拉动请求,模拟成浏览器去访问网站->跳过反爬虫机制
    headers = {'User-Agent':
               'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36'}
    opener = urllib.request.build_opener()
    opener.addheaders = [headers]

    # 获取网页内容
    content = opener.open(url).read().decode('Utf-8')

    # 构造正则表达式,从content中匹配关键词pattern
    raw_hrefs = re.findall(pattern, content, 0)

    # set函数消除重复元素
    hset = set(raw_hrefs)

    # 下载链接
    for href in hset:
        # 之所以if else 是为了区别只有一个链接的特别情况
        if (len(hset) > 1):
            link = url + href[0]
            filename = os.path.join(Directory, href[0])
            print("正在下载", filename)
            urllib.request.urlretrieve(link, filename)
            print("成功下载!")
        else:
            link = url + href
            filename = os.path.join(Directory, href)
            print("正在下载", filename)
            urllib.request.urlretrieve(link, filename)
            print("成功下载!")

        # 无sleep间隔,网站认定这种行为是攻击,反反爬虫
        time.sleep(1)



备注

Python正则表达式:

. 匹配任意1个字符(除了\n)

[ ] 匹配[ ]中列举的字符

\d 匹配数字,即0-9

\D 匹配非数字,即不是数字

\s 匹配空白,即 空格,tab键

\S 匹配非空白

\w 匹配非特殊字符,即a-z、A-Z、0-9、_、汉字

\W 匹配特殊字符,即非字母、非数字、非汉字、非_

如不懂的,评论区留言~

实用的化给个赞和关注吧!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐