美文网首页
[记录]爬取壁纸:python

[记录]爬取壁纸:python

作者: 小小杨树 | 来源:发表于2021-12-31 11:52 被阅读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()
    

    相关文章

      网友评论

          本文标题:[记录]爬取壁纸:python

          本文链接:https://www.haomeiwen.com/subject/yuwntrtx.html