# -*- coding: UTF-8 -*-

import urllib.request  # 导入用于打开URL的扩展库模块
import urllib.parse
import re  # 导入正则表达式模块


def open_url(url):
    print("url:%s" % url)
    req = urllib.request.Request(url)  # 将Request类实例化并传入url为初始值,然后赋值给req
    # 添加header,伪装成浏览器
    req.add_header('User-Agent',
                   'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 '
                   'Safari/537.36 SE 2.X MetaSr 1.0')
    # 访问url,并将页面的二进制数据赋值给page
    page = urllib.request.urlopen(req)
    # 将page中的内容转换为utf-8编码
    html = page.read().decode('utf-8')

    return html


def get_img(html):
    # [^"]+\.jpg 匹配除"以外的所有字符多次,后面跟上转义的.和png
    p = r'(http.:[\S]*?.(jpg|jpeg|png|gif|bmp|webp))'
    # 返回正则表达式在字符串中所有匹配结果的列表
    imglist = re.findall(p, html)
    print("List of Img: " + str(imglist))
    # 循环遍历列表的每一个值
    for img in imglist:
        try:
            # 以/为分隔符,-1返回最后一个值
            filename = img[0].split("/")[-1]
            # 访问each,并将页面的二进制数据赋值给photo
            photo = urllib.request.urlopen(img[0])
            w = photo.read()
            # 打开指定文件,并允许写入二进制数据
            f = open('D:/test/' + filename, 'wb')
            # 写入获取的数据
            f.write(w)
            # 关闭文件
            f.close()
            print(filename + " have been download...")
        except Exception as e:
            print("错误网址: %s \n" % str(img))
            with open("cuo.txt","a",encoding="utf-8") as f:
                f.write(str(img))
                f.write("\n")

# 该模块既可以导入到别的模块中使用,另外该模块也可自我执行
if __name__ == '__main__':
    import random
    import datetime
    import time
    for i in  range(882756,100126,-1):
        try:
            number = random.randint(5, 10)
            time.sleep(number)
            print("页数:%s" % str(i))
            # 定义url
            url = "https://www.wujieai.com/plaza/%s" % i
            # 将url作为open_url()的参数,然后将open_url()的返回值作为参数赋给get_img()
            get_img(open_url(url))
            print("all over...")
        except Exception as e:
            print("错误主要网址: %s \n" % str(url))
            with open("404.txt","a",encoding="utf-8") as f:
                f.write(str(url))
                f.write("\n")

 

posted on 2023-05-16 22:39  大话人生  阅读(52)  评论(0)    收藏  举报