吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11259|回复: 188
收起左侧

[Python 原创] 万年潜水党,发个爬小姐姐的源码

    [复制链接]
xinxiu 发表于 2023-4-9 22:09
最近也要学爬虫,发个爬小姐姐的源码,只用了多线程,没有作查重处理。
图片保存在J:\xiezhen\文件夹下,可自行修改。
第一次发帖,如果违规,请版主删除。谢谢
[Python] 纯文本查看 复制代码
import time
import requests
from lxml import etree
import os
import concurrent.futures

def download_image(url, img_path):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    img_name = url.split('/')[-1]
    with open(os.path.join(img_path, img_name), 'wb') as f:
        f.write(response.content)
        print(f'图片:{img_path}' + '/' + f'{img_name}下载完成!')

def process_page(page):
    url = f'https://www.xiezhen.xyz/page/{page}'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    response = requests.get(url, headers=headers)
    html = etree.HTML(response.content)
    mail_url = html.xpath('//div[@class="excerpts"]/article/a/@href')
    for url in mail_url:
        response = requests.get(url, headers=headers)
        html = etree.HTML(response.content)
        sub_url = html.xpath('//article/p/img')
        img_title = html.xpath('//title/text()')[0].split('-')[0]
        img_path = f'J:/xiezhen/{img_title}'
        if not os.path.exists(img_path):
            os.makedirs(img_path)
        with concurrent.futures.ThreadPoolExecutor() as executor:
            futures = []
            for s_url in sub_url:
                img_url = s_url.attrib['src']
                futures.append(executor.submit(download_image, img_url, img_path))
            for future in concurrent.futures.as_completed(futures):
                pass
        time.sleep(0.5)

if __name__ == '__main__':
    with concurrent.futures.ThreadPoolExecutor() as executor:
        futures = []
        for page in range(1, 573):
            futures.append(executor.submit(process_page, page))
        for future in concurrent.futures.as_completed(futures):
            pass

免费评分

参与人数 29吾爱币 +22 热心值 +25 收起 理由
junjia215 + 1 + 1 谢谢@Thanks!
valkyries254 + 1 + 1 用心讨论,共获提升!
DiGua3 + 1 用心讨论,共获提升!
lalala123456 + 1 我很赞同!
zhanget3 + 1 + 1 谢谢@Thanks!
lixianhe + 1 我很赞同!
liusg + 1 + 1 谢谢@Thanks!
qqshupei + 1 + 1 我很赞同!
wwvvy + 1 + 1 我很赞同!
xubaichao + 1 我很赞同!
justblue38 + 1 我很赞同!
nxy2002 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
denghonggui + 1 谢谢@Thanks!
echoaku + 1 + 1 我很赞同!
cl201696084076 + 1 + 1 热心回复!
huashang123 + 1 谢谢@Thanks!
cyhlxt + 1 + 1 谢谢@Thanks!
LiAmu369 + 1 + 1 热心回复!
tricky + 1 + 1 谢谢@Thanks!
lnb316 + 1 + 1 热心回复!
LOVEFYL + 1 + 1 我很赞同!
宇智波灬劫 + 1 + 1 热心回复!
XIcey007 + 1 热心回复!
狂笑一君 + 1 + 1 我很赞同!
pojiecainiao + 1 + 1 谢谢@Thanks!
wxn2023 + 1 + 1 热心回复!
lingwushexi + 1 谢谢@Thanks!
ameiya888 + 1 + 1 热心回复!
husu1012 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| xinxiu 发表于 2023-4-12 23:55
waweiggfnh 发表于 2023-4-12 14:46
我也是,好多图片打不开。

把download_image函数的请求头改为

[Python] 纯文本查看 复制代码
headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
        'Referer':'https://www.xiezhen.xyz/'
    }
ydx20201111 发表于 2023-4-10 06:12
这是一个Python脚本,用于从名为“xiezhen”的网站下载图片。它使用请求库向网站发送 HTTP 请求,并使用 lxml 库解析响应的 HTML 内容。

该脚本定义了两个函数:download_image和process_page。该download_image函数以一个URL和一个文件路径为参数,向URL发送请求获取图片内容,并将内容保存到文件路径中。该process_page函数以页码为参数,向网站发送请求获取该页面的HTML内容,解析内容提取图片页面的URL,然后为每个图片URL调用该函数下载对应的download_image图片图像。

该脚本还使用了concurrent.futures模块创建了一个线程池,这样可以并行发送多个请求和下载图片,可以提高下载速度。

在主程序块中,脚本创建一个线程池,并向该池提交任务以从网站的所有页面下载图像。最后,脚本在退出之前等待所有任务完成。

请注意,此脚本仅用于教育目的,未经许可不得用于下载受版权保护的图像。

免费评分

参与人数 1吾爱币 -8 收起 理由
侃遍天下无二人 -8 禁止照搬AI回复

查看全部评分

 楼主| xinxiu 发表于 2023-4-9 23:12
oxding 发表于 2023-4-9 23:09
img_name = url.split('/')[-1]
    with open(os.path.join(img_path, img_name), 'wb') as f:

修改img_path
a681861 发表于 2023-10-27 08:28
网站打不开了
ww5270616 发表于 2023-4-9 23:29
网址还有多点嘛
oxding 发表于 2023-4-9 23:13

怎么改 比如我要自动建立aaa文件夹 怎么写
oxding 发表于 2023-4-9 23:09
img_name = url.split('/')[-1]
    with open(os.path.join(img_path, img_name), 'wb') as f:

问一下如何在程序根目录下自动建立一个xxx文件夹 然后把图片网里面写?
antness 发表于 2023-4-9 23:09
网址不错哈哈哈
dujiu3611 发表于 2023-4-9 23:14
我貌似看到一个还不错的网址哦
Andrea 发表于 2023-4-9 23:14
这个网站比较费精力啊~
chinap 发表于 2023-4-9 23:15
学习了,感谢分享知识
metaxman 发表于 2023-4-9 23:18
网址记下了,兄弟
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 20:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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