[记录]爬取壁纸:python

2021-12-31  本文已影响0人  小小杨树
import requests
import re
import os
from bs4 import BeautifulSoup
from urllib.request import urlretrieve

'''
    思路:获取网页信息---解析页面信息---模拟翻页---匹配所需数据---下载到本地文件
'''
baseurl = 'http://www.netbian.com/'  # 基本的url


# 下载百分比
def downPercent(num, size, total):  # 数据块数量,大小,总的数据量
    result = num * size / total
    result = 1.0 if result > 1.0 else result  # 如果超过了1则下载完成了
    if (result > 0.95):  # 下载到95以上输出下载状态
        print("当前的进度:{}".format(result * 100))


'''
    获取当前页面信息,从里面找到我们所需的数据
'''


def getHtml(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0'
    }
    html = requests.get(url, headers=headers, timeout=5)  # 伪装成浏览器访问
    html.encoding = 'gbk'
    return html


# code = re.findall(r'<meta charset="(.*?)" />', text)[0]  #获取网页编码格式
# html.encoding = code                                     #采用网页的编码格式是gbk
def pageHtml():
    nextHtml = baseurl + '/index_{}.htm'  # 下一页的格式
    for page in range(1, 11):  # 获取当前页的内容
        getData(page, nextHtml.format(page) if page > 1 else baseurl)  # 从第二页开始就采用下一页的格式


'''
    获取网页信息
'''


def getData(page, url):
    html1 = getHtml(url)  # 第一层网页 获取数据的
    print(url)
    soup = BeautifulSoup(html1.content, "html.parser")
    _list = str(soup.find_all(class_="list")[0])
    print(soup.find_all(class_="list"))
    layer1 = r'href="/(.*?htm)"'  # 第一层网页的正则匹配,获取图片链接
    datalist = re.findall(layer1, _list)
    layer2 = r'<img src="(.*?)" alt='
    jpglinks = []
    for data in datalist:
        html2 = getHtml(baseurl + data).text
        jpg = re.findall(layer2, html2)[0]
        jpglinks.append(jpg)  # 将图片链接放进列表内
    downData(jpglinks, page, 1)  # 下载数据


'''
    解析网页内容并下载
'''


def downData(jpglinks, page, num=1):
    newpath = './images/页码{}'.format(page)  # 指定的文件夹
    try:
        t = os.makedirs(newpath)  # 创建新的文件夹
    except FileExistsError:
        print('文件夹存在,请删除文件夹 {} 再操作'.format(os.path.dirname(os.getcwd() + newpath.replace('.', ''))))
    else:
        for jpg in jpglinks:
            path = newpath + '/图片{}.jpg'.format(num)
            urlretrieve(jpg, path, downPercent)  # 下载到指定文件夹
            num += 1


def main():
    pageHtml()

if __name__ == '__main__':
    main()
上一篇下一篇

猜你喜欢

热点阅读