吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4804|回复: 25
收起左侧

[Python 转载] 爬取电脑壁纸网站,软件区同步分享成品

[复制链接]
MyModHeaven 发表于 2022-4-10 21:47
本帖最后由 MyModHeaven 于 2022-4-10 22:55 编辑

背景

  • 这是第二次发这个网站的爬虫,第一次在这里:

python爬取壁纸,软件区同步发布成品,以及记录我的倔强
https://www.52pojie.cn/thread-1528918-1-1.html
(出处: 吾爱破解论坛)

  • 原来的可能不能用了,网站的 HTML 源码有有改动
  • 上一次是用 lxml 库写的,这次用 bs4 库
  • 另外还做了一些小改进,提高了程序的稳定性和可读性
  • 这次还下载了 666 张美女类别下的壁纸,但中间出了一个小问题,导致下面的下载链接里只有 644 张图片

LAaz2n.jpg

LAdCrV.jpg

下载:

644 张美女电脑壁纸图片
https://www.52pojie.cn/thread-1619753-1-1.html
(出处: 吾爱破解论坛)

说明

  • 下载下来的图片放在 D 盘的 photo_from_netbian.com 文件夹里
  • 爬的网站是:http://www.netbian.com
  • 编程语言区不能发软件成品,所以我发在了这里:

电脑壁纸爬取下载软件
https://www.52pojie.cn/thread-1619790-1-1.html
(出处: 吾爱破解论坛)

源码

import requests, os
from bs4 import BeautifulSoup

def req(url, direc=True):
    headersvalue = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36 Edg/94.0.992.50'
        }
    r = requests.get(url, headers=headersvalue)
    if direc:
        r.encoding = 'gbk'
        soup = BeautifulSoup(r.text, 'lxml')
        return soup
    else:
        return r

def flag(s):
    flag = True
    while flag:
        try:
            n = int(input(s + "\n"))
            flag = False
        except ValueError:
            print('\n输入有误,请输入一个正整数!!!\n')
        except:
            continue
    return n

def get_jpg(index_url):
    n = flag('需要下载多少张壁纸?')
    ndp, i_url = 0, index_url                   # ndp: numbers of downloaded phtots
    for i in range(1, n//19+2):
        print(f'接下来下载所选分类的第 {i} 页')
        node_a = req(i_url).find('div', {'class': 'list'}).find_all('a')
        page_urls = ['http://www.netbian.com'+a.attrs['href'] for a in node_a]
        for page_url in page_urls:
            try:
                attrs = req(page_url).find('div', {'class': 'pic'}).img.attrs
            except requests.exceptions.ConnectionError:
                if page_url == 'http://www.netbian.comhttp://pic.netbian.com/':
                    continue                    # 跳过每页的第三张图片
                else:
                    print('好像发生了未知错误 1 ,,,')
            except:
                print('好像发生了未知错误 2 ,,,')
            jpg_url, jpg_title = attrs['src'], attrs['title']
            if not os.path.exists(r'd:\photo_from_netbian.com'):
                os.mkdir(r'd:\photo_from_netbian.com')
            with open(fr'd:\photo_from_netbian.com\{jpg_title}.jpg', 'wb') as f:
                f.write(req(jpg_url, direc=False).content)
            ndp += 1
            print(f'第 {ndp} 张图片下载完成!')
            if ndp == n:
                break
        if ndp == n:
            break
        i_url = '{}index_{}.htm'.format(index_url, i+1)
    print(f'{n}张图片全部下载完成,默认保存位置是 d:\photo_from_netbian.com')

print('''网站的壁纸按内容分类,共有 23 种,分别是:\n
1. 日历    2. 动漫    3. 风景    4. 美女    5. 游戏    6. 影视    7. 动态    8. 唯美    9.设计    10.花卉       11.动物    12.节日    
13.人物    14.美食    15.水果    16.建筑    17.体育    18.军事    19.非主流  20.护眼    21.LOL    22.王者荣耀   23.其他\n\n''')
choice = flag('按照分类下载,输入对应分类序号;随机下载,输入“0”。请输入:')
choices = ['', 'rili/', 'dongman/', 'fengjing/', 'meinv/', 'youxi/', 'yingshi/', 'dongtai/', 'weimei/', 'sheji/', 'huahui/', 
            'dongwu/', 'jieri/', 'renwu/', 'meishi/', 'shuiguo/', 'jianzhu/', 'tiyu/', 'junshi/', 'feizhuliu/', 's/huyan/', 
            's/lol/', 's/wangzherongyao/', 'qita/']
index_url = 'http://www.netbian.com/' + choices[choice]

get_jpg(index_url)

免费评分

参与人数 7吾爱币 +5 热心值 +6 收起 理由
李军 + 2 爬了一次,第二次不能爬了,不知为何
yjn866y + 1 + 1 热心回复!
112589 + 1 + 1 热心回复!
KeepClam + 1 谢谢@Thanks!
zz08808 + 1 + 1 热心回复!
j542936 + 1 好像这个网站只能爬1920*1080的~
FcQ1688 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| MyModHeaven 发表于 2022-4-11 08:14
hackerbob 发表于 2022-4-10 22:07
感谢分享,不过用Beautifulsoup是不是麻烦了,用re和xpath好像简洁

正则表达式没有学过,网络爬虫用 lxml 和 bs4 现在还能满足我。

相比 lxml ,我更喜欢用 bs4 ,因为 Tag 对象可以返回对应的 HTML,找错的时候非常方便。lxml 只返回一个对象类型和内存地址,没什么用
 楼主| MyModHeaven 发表于 2022-4-25 16:08
芫恬夜悟 发表于 2022-4-25 14:31
楼主那个644张壁纸的帖子怎么没有啦,可以再发一次吗?我想保存一下

那个被删了,说是不让发写真。。。
o824 发表于 2022-4-10 22:05
hackerbob 发表于 2022-4-10 22:07
感谢分享,不过用Beautifulsoup是不是麻烦了,用re和xpath好像简洁
两仪樱 发表于 2022-4-10 22:14
谢谢分享
wfys66 发表于 2022-4-10 22:23
支持支持
sbzylwdnc 发表于 2022-4-10 23:05
感谢分享
wine54088 发表于 2022-4-10 23:13
支持楼主,可以尽情的换壁纸了
Dragon0617 发表于 2022-4-10 23:17
谢谢分享,看起来很方便
KyrieIrving11 发表于 2022-4-11 00:42
感谢分享
ShanGuiOne 发表于 2022-4-11 07:22
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表