找回密码
  注册[Register]
查看: 402|回复: 6

[python] 一个高速爬取小姐姐写真照的异步爬虫

[复制链接]
发表于 2022-9-20 07:05 | 显示全部楼层 |阅读模式
禁止求评分、诱导评分、互刷评分、互刷悬赏值,违规者封号处理。
禁止发布推广、邀请码、邀请链接、二维码或者有利益相关的任何推广行为。
所有非原创软件请发布在【精品软件区】,发帖必须按照本版块版规格式发帖。

注意:此版本只能搜索下载,并且输入关键字后会立刻下载所有下载结果,可以先在网站上确定自己要下载的资源再输入,或者自己修改代码,这个网站没有反爬虫设置,还是很简单的。


演示:


爬虫代码:

[Python] 纯文本查看 复制代码
import aiofiles
import aiohttp
import asyncio
from lxml import etree
import uvloop    # win下忽略,不要导入此模块
import os
 
asyncio.set_event_loop_policy(uvloop.EventLoopPolicy())    # win下注释掉此行
headers={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"}
 
async def get_url(session,url):
    async with session.get(url,headers=headers) as resp:
        if resp.status==200:
            res = await resp.text()
            return res
 
 
async def htmlParsh(sem,session,html):
    async with sem:
        htmlPs = etree.HTML(html)
        chaUrls = htmlPs.xpath('//a[@class="item-link"]/@href')
        tasks = []
        for url in chaUrls:
            task = asyncio.create_task(imgParse(session,url))
            tasks.append(task)
        nextPageUrl = htmlPs.xpath('//li[@class="page-item"]/a[@rel="next"]/@href')
        if not nextPageUrl:
            await asyncio.wait(tasks)
            print("所有页面索引完毕!")    
            return      
        else:
            await main(nextPageUrl[0])
 
async def imgParse(session,url):
    imgHtml = await get_url(session,url)
    htmlPs = etree.HTML(imgHtml)
    iTitle = htmlPs.xpath('//h1[@class="post-title"]/text()')[0]
    imgUrls = htmlPs.xpath('//div[@data-fancybox="gallery"]/img/@data-src')
    tasks=[]
    for url in imgUrls:
        urlSplit = url.split("/")
        imgName = urlSplit[-1]
        imgContent = await getImg(session,url)
        task = asyncio.create_task(writeImg(iTitle,imgName,imgContent),name=f'{iTitle}-{imgName}')
        tasks.append(task)
    await asyncio.wait(tasks)
 
 
async def writeImg(ititle,imgname,imgcontent):
    downloadPath ="/home/yin/download/pyspider"
    if not os.path.exists(downloadPath + '/' + keyword + '/' + ititle):
        os.makedirs(downloadPath + '/' + keyword + '/' + ititle)
        async with aiofiles.open(downloadPath + '/' + keyword + '/' + ititle + '/' + imgname, 'wb') as f:
            print('正在下载:' + ititle + '/' + imgname)
            await f.write(imgcontent)
    else:
        if os.path.exists(downloadPath + '/' + keyword + '/' + ititle + '/' + imgname):
            print(f'{imgname}已存在,忽略下载!!!')
        else:
            async with aiofiles.open(downloadPath + '/' + keyword + '/' + ititle + '/' + imgname, 'wb') as f:
                print('正在下载:' + ititle + '/' + imgname)
                await f.write(imgcontent)
 
 
async def getImg(session,imgurl):
    async with session.get(imgurl,headers=headers) as resp:
        if resp.status == 200:
            imgContent = await resp.read()
            return imgContent
 
 
 
 
async def main(offset):
    sem = asyncio.Semaphore(5)
    async with aiohttp.ClientSession() as session:
        html = await get_url(session,offset)
        await htmlParsh(sem,session,html)
 
 
keyword = input("请输入要搜索的关键字:")
offset=f'https://www.f4mn.com/search.html?s={keyword}'
asyncio.run(main(offset))

免费评分

参与人数 1牛币 +1 收起 理由
li5669662 + 1 [大牛论坛4330.CN]-鼓励分享优秀软件安全工具和学习资料文档!

查看全部评分

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2022-9-20 07:48 | 显示全部楼层
感谢楼主分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-9-20 09:01 | 显示全部楼层
谢谢分享!
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-9-20 09:38 | 显示全部楼层
谢谢大牛
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-9-20 14:40 | 显示全部楼层
谢谢大佬
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-9-20 16:21 | 显示全部楼层

感谢楼主的分享
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

发表于 2022-9-21 11:18 | 显示全部楼层
6666
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心值】和【牛币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 有用 没用

使用道具 举报

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

本版积分规则

RSS订阅|手机版|小黑屋|大牛论坛 |我的广告

GMT+8, 2024-5-9 10:13 , Processed in 0.041493 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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