吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 14128|回复: 171
收起左侧

[Python] 写真爬虫(注意身体)

    [复制链接]
融汇木子 发表于 2022-2-26 15:59
环境和配置
Python 3.7.6
vscode
[Python] 纯文本查看 复制代码
'''
@Description: 多线程爬虫
@Author: Levin-e
@Date: 2020-03-23 22:31:38
'''

import math
import re
import threading
import time
import urllib.request
from multiprocessing.dummy import Pool as ThreadPool

import requests
from bs4 import BeautifulSoup
from lxml import etree

header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.106 Safari/537.36 Edg/80.0.361.54'
}


def get_info(url):
    html = get_html(url)
    selector = etree.HTML(html)
    info = selector.xpath('//div[@id="dinfo"]/span/text()')
    pic_num = re.findall(r'\d+', info[0])
    page_num = math.ceil(int(pic_num[0])/3)
    print('该套图总共有%s张' % pic_num[0])
    print('该套图总共有%d页' % page_num)
    return page_num


def get_html(url):
    index = requests.get(url, headers=header)
    return index.text


def get_href(url):  # 获取图片下载地址
    html = get_html(url)
    selector = etree.HTML(html)
    data = selector.xpath('//ul/img/@src')
    for url in data:
        url = url.replace('/s', '')
    start_thread_save_img(data)   # 调用多线程的函数


def save_img(img_src):
    img_src = img_src.replace('/s', '')
    print("正在下载 ->", img_src)
    urllib.request.urlretrieve(
        img_src, 'E:/photo/%s' % img_src.split('/')[-1])
    # 地址格式记得更改,按照下面的例子自己替换,找个文件夹存放你的图
    # 地址不存在是会报错的!!!
    # 示例: E:/photo/


def start_thread_save_img(img_url_list):
    pool = ThreadPool(3)  # 一页三张图,选三就行了,大于这个数值是浪费的
    pool.map(save_img, img_url_list)
    pool.close()


def main():
    url = "https://www.nvshens.net/g/30991/"  # 目标网站的地址格式,千万要注意第一页和之后的页是不一样的
    info = get_info(url)
    start_time = time.time()
    get_href(url)
    second_url = "https://www.nvshens.net/g/30991/{}.html"  # 上下都需要改地址
    for i in range(2, info+1):  # 如果下载到一半失败了,自己在这动手改页码继续下吧。。。
        get_href(second_url.format(i))
        time.sleep(2)  # 这个数值不要太小,对别人的服务器好点,留点喘息的时间
    end_time = time.time()
    print("共耗时:", end_time-start_time)


if __name__ == '__main__':
    main()

免费评分

参与人数 20吾爱币 +18 热心值 +17 收起 理由
jiushang521 + 1 我很赞同!
从来不想 + 1 + 1 热心回复!
zmllxh + 1 + 1 谢谢@Thanks!
dwdw110102 + 1 我很赞同!
cz243694364 + 1 + 1 我很赞同!
谢单单 + 1 + 1 谢谢@Thanks!
zxyfy + 1 用心讨论,共获提升!
Lthero + 1 + 1 网址取走了
安道尔的鱼 + 1 + 1 我很赞同!
guoruihotel + 1 + 1 谢谢@Thanks!
搬砖孩子要毕业 + 1 + 1 谢谢@Thanks!
shalj + 1 + 1 热心回复!
工地搬砖挣口粮 + 1 + 1 我很赞同!
shenhuxiad + 1 + 1 谢谢@Thanks!
xxscwsrym + 1 + 1 用心讨论,共获提升!
1ssue + 1 + 1 我很赞同!
liy00000 + 1 + 1 热心回复!
Q长路漫漫 + 1 原谅我看不懂
longjazz + 1 我很赞同!
刹那光华 + 1 + 1 无法显示此网页

查看全部评分

本帖被以下淘专辑推荐:

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

立竿见影 发表于 2022-2-26 16:31
小白表示看了这些代码干着急也没办法。只好看你们爽啦。
刹那光华 发表于 2022-2-26 17:58
建议再加这个 不用自己创建文件夹
[Python] 纯文本查看 复制代码
def exists(path):                                # 路径不存在则创建
    try:
        file_dir = os.path.split(path)[0]        # 获取路径目录
        if not os.path.isdir(file_dir):          # 目录是否存在
            os.makedirs(file_dir)                # 不存在则创建
    except:
        print(IOError)
        print('判断路径是否存在失败')
        return False
不羁的风儿 发表于 2022-2-26 16:37
xiaozeng2005 发表于 2022-2-26 19:35
你好无法运行啊路径我已经改了
微信图片_20220226193409.png
mokson 发表于 2022-2-26 16:09
我又不是特鲁多。
 楼主| 融汇木子 发表于 2022-2-26 16:10
mokson 发表于 2022-2-26 16:09
我又不是特鲁多。

是不是自己才知道哟
wkfy 发表于 2022-2-26 16:11
围墙太高,出不去。
 楼主| 融汇木子 发表于 2022-2-26 16:12
wkfy 发表于 2022-2-26 16:11
围墙太高,出不去。

想办法翻出去
天下无病 发表于 2022-2-26 16:22
写真嘛,身体Hold住
sukun 发表于 2022-2-26 16:31
这不女神社嘛
xunxunmimi0936 发表于 2022-2-26 16:55
楼主你辛苦了吧

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
乄心凉 + 1 + 1 谢谢@Thanks!

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2022-6-27 11:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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